\\Перебор всех паттернов в каталоге
start=200*10^35;
stop= 300*10^35;
step= 10^35;\\В каком интервале проверять каждый паттерн
pat=externstr("dir /a-d /b /s M12-??-??-??????.exe");
if(#pat==0, print("Not found patterns!"); quit);
for(i=1,#pat, s=strsplit(pat[i],"."); pat[i]=strjoin(s[1..#s-1],"."));
ff=vector(#pat,i, s=strsplit(pat[i],"\\");s[#s]);
{forstep(h=start,stop-1,step,
t0=getwalltime(); gettime(); q=0;\\Статистику будем подсчитывать для каждого круга величиной step
for(g=1,#pat,
system(strprintf("title %de%d:%s",h\step,logint(step,10),strjoin(strsplit(ff[g],"-")[2..3],"-")));\\Вывод текущего прогресса в заголовок окна консоли
read(concat(pat[g],".pat")); z=vectorsmall(#v,i,!issquare(v[i]));\\Сформируем вектор флагов squarefree в паттерне
forstep(ii=floor(h/pp.mod),ceil((h+step-1)/pp.mod),227*10^6,\\ВАЖНО: чтобы не считать лишнего эта величина не должна сильно превышать ceil(step/440538835723387181869888800)!
printf("%s: %0.3fe35\t\t%c",ff[g],(lift(pp)+pp.mod*ii)/1e35,13);
vi=extern(strexpand(pat[g],".exe ",ii," ",227*10^6," 2>nul")); q+=#vi;
for(t=1,#vi,
n=lift(pp)+pp.mod*vi[t];
if(n<h || n>=h+step, next);
if(
\\! (z[1]>0 && !ispseudoprime((n+0)/v[1])) ||
\\! (z[2]>0 && !ispseudoprime((n+1)/v[2])) ||
\\! (z[3]>0 && !ispseudoprime((n+2)/v[3])) ||
(z[4]>0 && !ispseudoprime((n+3)/v[4])) ||
(z[5]>0 && !ispseudoprime((n+4)/v[5])) ||
(z[6]>0 && !ispseudoprime((n+5)/v[6])) ||
(z[7]>0 && !ispseudoprime((n+6)/v[7])) ||
(z[8]>0 && !ispseudoprime((n+7)/v[8])) ||
(z[9]>0 && !ispseudoprime((n+8)/v[9])) ||
(z[10]>0 && !ispseudoprime((n+9)/v[10])) ||
(z[11]>0 && !ispseudoprime((n+10)/v[11])) ||
(z[12]>0 && !ispseudoprime((n+11)/v[12])) ||
\\! (z[13]>0 && !ispseudoprime((n+12)/v[13])) ||
\\! (z[14]>0 && !ispseudoprime((n+13)/v[14])) ||
\\! (z[15]>0 && !ispseudoprime((n+14)/v[15])) ||
0
,
next;
);
s=vector(15,d,numdiv(n+d-1)); k=#select(x->(x==12),s);
if(k>=11,
w=strprintf("%d:",n); f=", ALL";
for(j=1,#v, if(z[j]>0 && s[j]!=12, f=""; break));
if(k==#v, f=concat(f,", FOUND!!!"));
u=0; uu=0; foreach(s,d, w=concat(w,strprintf("%3d,",d)); if(d==12, uu=max(uu,u++), uu=max(uu,u);u=0););
w=concat(w,strprintf(" valids=%d, maxlen=%d%s", k,uu,f));
print(ff[g],": ",w); write(concat(pat[g],".out"),w);
);
);
);
);
printf("N=%d, %0.3fs (%0.3fs in PARI) per round.\t\t\t\n",q,(getwalltime()-t0)/1e3,gettime()/1e3);
)}
quit;