Ну ладно. Все эти предвычисления были два года назад. Я даже заглянул в пентадекатлон на 202 стр. Помню, что и сам воодушевлённо мастерил что-то, но безускоренно.
Сейчас просто обратился к ИИ Алику, братику Алисы, и он подсказал мне скрипт.
Нахождение девяточки по-китайски. Выводятся 12 кандидатов на первый элемент.
Код:
{
pt= [0,4,10,12,18,22,24,28,30];
pl=#pt;
w=19;
nw=primepi(w);
prs=primes(nw);
period=vecprod(prs);
print(period," period");
lpr=1;
wd=vector(nw);
for( ip=1,nw,
rip=[];
for( r=1,prs[ip]-1,
for( i=1,pl, if( (r+pt[i])%prs[ip]==0, next(2)));
rip =concat(rip,r) );
lpr=lpr*#rip;
wd[ip]=rip;
); \\for ip
printf("prove by %d#: %d formulae \n",prs[nw], lpr);
k=0;
forvec(v=vector(#wd,i,[1,#wd[i]]), k++; if(k>12, break);
form=lift(chinese( vector( #wd,j,Mod( wd[j][v[j]], prs[j]) ) ));
print(form);
);\\ forvec
}
9699690 period
prove by 19#: 1200 formulae
3125179
2614669
2104159
1593649
1083139
8230279
7719769
7209259
5167219
4656709
2554609
2044099
Вот предвычисление необходимых векторов для 19# самым примитивным перебором.
Обращение элементов.
Код:
{N=11;
vp=primes(N); print(vp);
np=#vp;
prm=vecprod(vp); print(prm);
m=vector(np,i,prm\vp[i]);print(m);
mm=vector(np);
for(i=1,np,
forstep(ip=1,m[i]-1,1,
if( (ip*vp[i])%m[i]==1, mm[i]=ip);
);
); print(mm);
}
[2, 3, 5, 7, 11, 13, 17, 19]
9699690
[4849845, 3233230, 1939938, 1385670, 881790, 746130, 570570, 510510]
[2424923, 2155487, 1163963, 197953, 320651, 459157, 33563, 26869]
Вот нахождение первых элементов с предвычислением.
Код:
{
pt= [0,4,10,12,18,22,24,28,30];
pl=#pt;
w=19;
nw=primepi(w);
prs=primes(nw);
period=vecprod(prs);
print(period," period");
lpr=1;
wd=vector(nw);
for( ip=1,nw,
rip=[];
for( r=1,prs[ip]-1,
for( i=1,pl, if( (r+pt[i])%prs[ip]==0, next(2)));
rip =concat(rip,r) );
lpr=lpr*#rip;
wd[ip]=rip;
); \\for ip
printf("prove by %d#: %d formulae \n",prs[nw], lpr);
print(wd);
a=[4849845, 3233230, 1939938, 1385670, 881790, 746130, 570570, 510510];
b=[2424923, 2155487, 1163963, 197953, 320651, 459157, 33563, 26869];
k=0;
forvec(v=vector(#wd,i,[1,#wd[i]]), k++; if(k>12, break);
form=(vecsum( vector( #wd,j,a[j]*b[j]*wd[j][v[j]]) ) )%period;
print(form);
);\\ forvec
}
9699690 period
prove by 19#: 1200 formulae
[[1], [1], [4], [1], [2, 6, 8], [5, 6, 7,...
3125179
2614669
2104159
1593649
1083139
8230279
7719769
7209259
5167219
4656709
2554609
2044099
Всё совпадает, а теперь надо всех кандидатов проверять. Извините, не откомментировал
Я верю, что где-то в запасниках PARI лежат эти предвычисленные массивы, а то самомы их предвычислять тоскливо. И мне кажется, что PARI их сама использует. Так же, как и первые полторы тысячи простых.