Правильно ли я понимаю, что в цепочку длиной 11 и более обязательно входят числа:
и
?
Да, и даже для цепочек 10+. Как и
.
а) найти первый миллон простых чисел. Наверное даже такие базы есть, уже посчитанные.
Это сотые доли секунды даже на медленном PARI, базы не нужны, их качать дольше чем насчитать такие простые.
Пусть
- это число
в наименьшей известной цепочке длиной 11, тогда проверять надо до
.
При этом можно проверять только простые, удовлетворяющие условию
Нет, это только для нахождения минимального делителя, но надо ведь найти и второе число:
б) выполнить
проверок на простоту.
А вот тут не очень понятно: минимальная известная 11-ка сейчас примерно 1e22, для
надо проверить
, а это порядка
простых.
На самом деле несколько меньше так как далеко не любое
подойдёт, надо чтобы оно при умножении хотя бы на один из 4-х возможных остатков
давало остаток ровно
, а таких вариантов
всего 3 штуки по модулю 32, т.е. проверять надо примерно 1/10 от указанного количества или 4e16 простых, что всё равно слишком много. PARI проверяет на простоту порядка 1e8/c, т.е. это на 4e8 секунд или 12 лет. Только для одного малого
.
Но, если в цепочку входит
, то в неё же входит и
. Потребовав чтобы все неизвестные числа имели остаток
и нужные остатки по модулю 32 можно сократить количество допустимых вариантов ещё в несколько (десятков) раз. Но остаётся всё равно слишком много.
-- 28.10.2022, 14:31 --При учёте чисел
, причём
и
получаем 54 варианта
по модулю 288, т.е. в 5.3 раза меньше:
Код:
len=lcm([2^5,3^2]); m=vector(len);
{forstep(q=1,len,2,
n0=2*q*1-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*9-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*17-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*25-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
)}
m=Vec(select(x->(x>0),m,1));
print(len,"/",#m,"=",1.0*len/#m); print(m); quit;
Её вывод:
288/54=5.333333333333333333333333333
[1, 7, 9, 11, 17, 25, 33, 35, 41, 47, 57, 61, 65, 71, 73, 79, 81, 89, 97, 101, 105, 113, 115, 119, 125, 129, 133, 137, 143, 153, 155, 169, 173, 177, 179, 185, 187, 193, 197, 201, 209, 223, 225, 227, 233, 241, 249, 251, 263, 265, 273, 277, 281, 287]
Учёт зеркальности (9 не на 32p-2, а на 32p+2, соответственно q на 32p-2) количество вариантов удваивается, а выигрыш падает вдвое, до 2.7 раза.
-- 28.10.2022, 14:40 --Учёт зеркальности (9 не на 32p-2, а на 32p+2, соответственно q на 32p-2) количество вариантов удваивается, а выигрыш падает вдвое, до 2.7 раза.
Неправ, не вдвое:
Код:
len=lcm([2^5,3^2]); m=vector(len);
{forstep(q=1,len,2,
n0=2*q*1-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*9-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*17-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*25-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*1+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*9+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*17+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
n0=2*q*25+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), m[q]=q);\\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
)}
m=Vec(select(x->(x>0),m,1));
print(len,"/",#m,"=",1.0*len/#m); print(m); quit;
Вывод:
288/91=3.164835164835164835164835165
[1, 7, 9, 11, 15, 17, 19, 23, 25, 29, 33, 35, 37, 39, 41, 43, 47, 55, 57, 61, 63, 65, 71, 73, 79, 81, 83, 87, 89, 91, 95, 97, 101, 103, 105, 111, 113, 115, 119, 125, 127, 129, 133, 135, 137, 143, 145, 151, 153, 155, 159, 169, 173, 175, 177, 179, 181, 183, 185, 187, 191, 193, 197, 199, 201, 205, 207, 209, 215, 223, 225, 227, 231, 233, 235, 241, 245, 247, 249, 251, 253, 255, 259, 263, 265, 271, 273, 277, 279, 281, 287]
-- 28.10.2022, 14:49 --И снова ошибся, выигрыш намного больше:
Код:
len=lcm([2^5,3^2]); m=vector(len);
{forstep(q=1,len,2,
n0=2*q*1-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*9-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*17-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*25-2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==2 && setsearch([1,5],((n0-2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*1+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*9+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*17+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
n0=2*q*25+2;
if(n0%32==0 && setsearch([1,5],(n0/32)%6), \\32p даёт p%6=1,5
if(n0%18==16 && setsearch([1,5],((n0+2)/18)%6), m[q]=q);\\18p даёт p%6=1,5
);
)}
m=Vec(select(x->(x>0),m,1));
print(len,"/",#m,"=",1.0*len/#m); print(m); quit;
Вывод:
288/4=72.00000000000000000000000000
[89, 191, 199, 209]
Всего 4 варианта по модулю 288 допустимо для
.