Объяснение было в теме выше, программа (в таком виде работать будет сутками, может и больше недели, я запускал по частям с разными qrmin и qrmax и в несколько потоков) (показываю с сокращениями, без вывода любой статистики и прогресса, только вычисления):
Код:
stop=1e22; qrmin=13*2; qrmax=10000;\\Границы перебора решений и qr
{WriteLog(p,q,r)=my(h,s,d,w,k,t,x,maxlen);\\Вывод в лог в удобном формате, на работу не влияет
h=round(p^2*q*r/32)*32-7;
s=vector(15,d,numdiv(h+d-1)); k=#select(x->(x==12),s);
w=strprintf("%d*%d*%d^2:%d:",r,q,p,h);
foreach(s,d, w=strprintf("%s%3d,",w,d));
w=strprintf("%s valids=%d, maxlen=%d", w,k,t=0;maxlen=vecmax(vector(#s,d,if(s[d]==12,t++,t=0))));
print(w); write("check_small_qr.txt",w);
}
pmax=sqrt(stop/qrmin); rmax=precprime(sqrt(qrmax));\\Перебирать меньшее из двух чисел q и r достаточно лишь до корня из максимума произведения
{forprime(p=0e9,pmax,
M=stop/p^2; rr=min(rmax,M/13);\\Максимально безопасная граница перебора r
forprime(r=2,rr,
q0=max(qrmin/r,r+1); qq=min(qrmax,M)/r;\\Максимально безопасные границы перебора q
forprime(q=q0,qq,
h=p^2*q*r; nn=round(h/32); if(h>stop, break, !ispseudoprime(nn), next);\\Получаемая цепочка и начало её проверки
h=nn*32; x=h%18;\\В h величина 32x
if(x==2, if(!ispseudoprime((h-2)/18) || numdiv(h+2)!=12, next);
, x==16, if(!ispseudoprime((h+2)/18) || numdiv(h-2)!=12, next);
, next;\\Другие варианты исключены
);
if(numdiv(h-1)!=12 || numdiv(h+1)!=12, next);\\Все 4 числа вокруг 32x должны быть правильными
WriteLog(p,q,r);\\Что-то нашли
);
);
)}
Если она не найдёт решений длиной 11 до 1e22 и qr<10000, то это и позволит получать ускорение 40-50 раз на
любых паттернах для цепочек длиной 11 без изменения программы Hugo. Ну а если вдруг найдёт, то это будет новая минимальная 11-ка.
Ну а если найдёт цепочку длиннее, то это будет вообще сенсация.
У меня нашлись лишь 12 цепочек длиной 7, часть которых перечислена в сообщении с объяснением идеи.
-- 18.11.2022, 16:07 --в README написано:
Но не написано что это реально проверено и работает.
-- 18.11.2022, 16:44 --Если/когда будете считать этой программой, рекомендую сначала поставить qrmax=221 и посчитать все p до 2e10 (нигде указывать не надо, вычислится само), потом же везде указывать qrmin=221 и p будут перебираться уже почти втрое быстрее. И вообще поделить работу на небольшие кусочки по qrmax-qrmin (зависимость времени счёта квадратична от величины этого интервала) по несколько сотен и потом тысячу-две и каждый раз обновлять qrmin, это снизит границу перебора для p, ведь PARI не так уж и быстро их перебирает в forprime.
-- 18.11.2022, 17:00 --А потом, подняв stop до 1.21e23 и затратив грубо вдесятеро больше времени (т.е. порядка 10 недель в один поток), можно тот же трюк использовать и для аналогичного ускорения доказательства 12-ки.
Вот с 13+ это уже плохо проходит, слишком много придётся перебирать простых. Хотя при реализации на С или асме тоже не за гранью реальности.