Если что, кое-как написал программку:
Код:
default(parisizemax,2^8*10^6)
n=10
vv=vector(2^n,i,0)
t=1; forstep(k=1,2^n,1, while(!if((2^t-2)%t==0,1,0), t++); vv[k]=t; t++;);
v=vector(vecmax(vv)); foreach(vv,i, v[i]=1); v
v1=vector(vecmax(vv),i,if(i==1,0,1)*i%2*(1-v[i]))
v2=select(x->(x>0),v1,1)
v3=vector(length(v2)-1,i,v2[i+1]-v2[i])
v4=vector(length(v2)-1,i,if(v3[i]==6,0,1))
v5=vector(length(v2)-1,i,0)
for(i=1,length(v2)-1,v5[i]=if(i==1,0,if(v4[i]==0,0,if(v3[i]+v5[i-1]==6,0,if(v3[i]+v5[i-1]>6,0,v3[i]+v5[i-1])))))
v6=vector(length(v2)-1,i,if(i==1,0,if(v3[i]==6,if(v5[i-1]>0,1,0))))
z=1; forstep(k=1,100,1, while(!if(v6[z]==1,1,0), z++); print(v2[z]+6-v5[z-1]); z++;);
Громоздкая конечно, и вполне вероятно, что ее можно упростить. Репортит об ошибке на ближайшей шестерке. Длинные хвосты обрабатывать не умеет. Если ошибка на шаг назад от шестерки, вот тогда да. Результат работы (до
):
Нулями обозначены псевдо-простые Ферма, выделенные в ходе работы программы, а единицами - простые. Некоторые из последних можно превратить в псведо-простые Ферма, но это надо с конца искать где ошибка, а этот момент я пока не продумал.
Плюс оказалось, что правило
подряд идущие значения первых разностей принадлежат одному из паттернов:
,
,
,
соблюдается далеко не всегда. По крайней мере, нарушается оно достаточно редко.
-- 07.02.2022, 00:23 --Плюс оказалось, что правило
kthxbye в сообщении #1548155
писал(а):
подряд идущие значения первых разностей принадлежат одному из паттернов:
,
,
,
соблюдается далеко не всегда. По крайней мере, нарушается оно достаточно редко.
Вру конечно, вру. Специально проверил на нечетных составных - все соблюдается. Нарушения выше обусловлены отсутствием как раз-таки псевдо-простых Ферма. Например из числа
, которое выдает программа нельзя получить псевдо-простое Ферма, но программа его репортит из-за отсутствия
.