Да, про
я недосмотрел что уже было (я оставлял некоторые уже решённые
в программе для контроля).
Код на PARI/GP медленный, вот пример проверки диапазона
:
Код:
? nn=[3, 10, 12, 19, 21, 28, 30, 37, 39, 41, 50, 51, 52, 55, 56, 60, 66, 67, 69, 71, 82, 83, 86, 96, 99];
? t(p)={ my(n,y); y=ceil(sqrt(p)); n=y^2-p; if(n<100 && vecsearch(nn,n) && ispseudoprime(p), printf("%d+%d=%d^2\n", n,p,y)); }
? for(i=10^4,10^6, d=digits(i); r=fromdigits(Vecrev(d)); t(i*10^#d+r); m=i*10^#d*10+r; forstep(k=0,9*10^#d, 10^#d, t(m+k)); );
41+95042724059=308290^2
28+1289830389821=1135707^2
60+1418240428141=1190899^2
time = 57,191 ms.
Или примерно 200 млн значений
в час.
Почему мне показалось что примерно за час досчиталось до
- не знаю, похоже ошибся, наверное про час это лишь до
.
-- 30.12.2018, 21:11 --Что-то я запутался, похоже код выше наоборот медленнее старого доброго перебора
:
Код:
? n=3; forstep(y=110*10^7,111*10^7,2, p=y^2-n; if(!ispseudoprime(p), next); d=digits(p); if(d==Vecrev(d), printf("%d+%d=%d^2\n", n,p,y)));
3+1219261354531629121=1104201682^2
time = 15,116 ms.
Тут скорость порядка 2.4 млрд значений
в час. Зато проверяется только один вариант
.