29/04/13 8356 Богородский
|
Последний раз редактировалось Yadryara 09.08.2024, 11:36, всего редактировалось 1 раз.
Уникальными вариантами являются например, симметричные пары. Естественно, ведь они не имеют суперпартнёров. В общем, если для данного паттерна есть совпадение старым и новым способом и C1, и C2, то ничего исправлять не надо, остальные совпадут автоматически. Для 7-60 и для 19-252 это так. Для 21-324 ещё не смотрел. А для 7-108-1 я пока поправил так. В битовые маски не вникал. (PARI)
Код: {print(); v=[0, 18, 24, 54, 84, 90, 108]; print("v=",v);print();
BC=vector(#v+10,k, prodeulerrat(( p^k - k*p^(k-1) )/(p-1)^k, 1, nextprime(k+1)) );
MC=vector(#v+10,k, x=1.0; forprime(p=3,k,x/=p*(1-1.0/p)^k); forprime(p=k+1,v[#v]/2,x/=p-k);x );
CC=vector(#v+10,k, 2^(k-1) * MC[k] * BC[k]);
a=setminus(vector(v[#v]/2,i,i*2),v); C1=C2=C3=C4=C5=C6=C7=C8=C9=C10=0; nn=vector(10);
v0=vector(v[#v]/2,p, if(p>2&&isprime(p),setminus(vector(p,i,i-1),Set(-v%p)),[]));
m0=vector(#v0,p, t=0;foreach(v0[p],x, t=bitor(t,2^x););t);
C=CC[#v]; forprime(p=3,#m0, C*=hammingweight(m0[p]); ); printf("C =%0.3f\n",C);
for(i1=1,#a/2, forprime(p=3,#v+1, if(m0[p]==2^(-a[i1]%p), next(2)); ); m1=m0; t=CC[#v+1]; forprime(p=3,#m1, m1[p]=bitnegimply(m1[p],2^(-a[i1]%p)); t*=hammingweight(m1[p]); ); C1 +=2*t; nn[1]++;
for(i2=i1+1,#a-i1, forprime(p=3,#v+2, if(m1[p]==2^(-a[i2]%p), next(2)); ); m2=m1; t=CC[#v+2]; forprime(p=3,#m2, m2[p]=bitnegimply(m2[p],2^(-a[i2]%p)); t*=hammingweight(m2[p]); ); C2 +=2*t; nn[2]++;
for(i3=i2+1,#a-i1, forprime(p=3,#v+3, if(m2[p]==2^(-a[i3]%p), next(2)); ); m3=m2; t=CC[#v+3]; forprime(p=3,#m3, m3[p]=bitnegimply(m3[p],2^(-a[i3]%p)); t*=hammingweight(m3[p]); ); C3 += 2*t; nn[3]++;
for(i4=i3+1,#a-i1, forprime(p=3,#v+4, if(m3[p]==2^(-a[i4]%p), next(2)); ); m4=m3; t=CC[#v+4]; forprime(p=3,#m4, m4[p]=bitnegimply(m4[p],2^(-a[i4]%p)); t*=hammingweight(m4[p]); ); C4 += 2*t; nn[4]++;
for(i5=i4+1,#a-i1, forprime(p=3,#v+5, if(m4[p]==2^(-a[i5]%p), next(2)); ); m5=m4; t=CC[#v+5]; forprime(p=3,#m5, m5[p]=bitnegimply(m5[p],2^(-a[i5]%p)); t*=hammingweight(m5[p]); ); C5 += 2*t; nn[5]++;
for(i6=i5+1,#a-i1, forprime(p=3,#v+6, if(m5[p]==2^(-a[i6]%p), next(2)); ); m6=m5; t=CC[#v+6]; forprime(p=3,#m6, m6[p]=bitnegimply(m6[p],2^(-a[i6]%p)); t*=hammingweight(m6[p]); ); C6 += 2*t; nn[6]++;
for(i7=i6+1,#a-i1, forprime(p=3,#v+7, if(m6[p]==2^(-a[i7]%p), next(2)); ); m7=m6; t=CC[#v+7]; forprime(p=3,#m7, m7[p]=bitnegimply(m7[p],2^(-a[i7]%p)); t*=hammingweight(m7[p]); ); C7 += 2*t; nn[7]++;
for(i8=i7+1,#a-i1, forprime(p=3,#v+8, if(m7[p]==2^(-a[i8]%p), next(2)); ); m8=m7; t=CC[#v+8]; forprime(p=3,#m8, m8[p]=bitnegimply(m8[p],2^(-a[i8]%p)); t*=hammingweight(m8[p]); ); C8 += 2*t; nn[8]++;
for(i9=i8+1,#a-i1, forprime(p=3,#v+9, if(m8[p]==2^(-a[i9]%p), next(2)); ); m9=m8; t=CC[#v+9]; forprime(p=3,#m9, m9[p]=bitnegimply(m9[p],2^(-a[i9]%p)); t*=hammingweight(m9[p]); ); C9 += 2*t; nn[9]++;
))))) ))));
nn=2*nn;
for(i1=1,#a/2, forprime(p=3,#v+1, if(m0[p]==2^(-a[i1]%p), next(2)); ); m1=m0; t=CC[#v+1]; forprime(p=3,#m1, m1[p]=bitnegimply(m1[p],2^(-a[i1]%p)); t*=hammingweight(m1[p]); );
i2=#a+1-i1; forprime(p=3,#v+2, if(m1[p]==2^(-a[i2]%p), next(2)); ); m2=m1; t=CC[#v+2]; forprime(p=3,#m2, m2[p]=bitnegimply(m2[p],2^(-a[i2]%p)); t*=hammingweight(m2[p]); ); C2 +=t; nn[2]++;
for(i3=i1+1,#a-i1, forprime(p=3,#v+3, if(m2[p]==2^(-a[i3]%p), next(2)); ); m3=m2; t=CC[#v+3]; forprime(p=3,#m3, m3[p]=bitnegimply(m3[p],2^(-a[i3]%p)); t*=hammingweight(m3[p]); ); C3 += t; nn[3]++;
for(i4=i3+1,#a-i1, forprime(p=3,#v+4, if(m3[p]==2^(-a[i4]%p), next(2)); ); m4=m3; t=CC[#v+4]; forprime(p=3,#m4, m4[p]=bitnegimply(m4[p],2^(-a[i4]%p)); t*=hammingweight(m4[p]); ); C4 += t; nn[4]++;
)));
printf("C1=%0.3f\n",C1); printf("C2=%0.3f\n",C2); printf("C3=%0.3f\n",C3); printf("C4=%0.3f\n",C4); printf("C5=%0.3f\n",C5); printf("C6=%0.3f\n",C6); printf("C7=%0.3f\n",C7); printf("C8=%0.3f\n",C8); printf("C9=%0.3f\n",C9); print(); print(binomial(48)[1..10]);print(); obr=[1, 48, 667, 4766, 21826, 71186, 174310, 328658, 482192, 551548, 0]; print(); print(obr); print(concat(1,nn)); print();
posta=4;sta=10^posta; print("posta = ",posta);print();
for(po=14,15, L=intnum(t=sta, 10^po, 1/log(t)^#v * (C - C1/log(t) + C2/log(t)^2 - C3/log(t)^3 + C4/log(t)^4 - C5/log(t)^5 + C6/log(t)^6 - C7/log(t)^7 + C8/log(t)^8 - C9/log(t)^9 ) );
all=intnum(t=sta, 10^po, C/log(t)^#v);
printf("10^%u: %0.3f %0.6f\n",po,L,L/all); ); print();
quit;}
|
|