29/04/13 8592 Богородский
|
nn=[1, 8, 28, 56, 69] Вы, кстати, не указали полного nn[]. А он таков: [1, 8, 28, 56, 69, 52, 22, 4, 0, 0]Дальше тоже нули. Однако, чтобы полностью выровнять количества для этого паттерна 18-122 недостаточно последнего цикла по i4, как в примере выше. Надо сделать ещё три обычных цикла вплоть до i7, c обычным наращиванием, без удвоения то есть C4 += t, C5 += t и т. д. Собственно, вот как я сделал основную часть проги: (PARI)
Код: {print(); t0=getwalltime();
v=[0, 2, 18, 20, 30, 32, 42, 44, 60, 62, 78, 80, 90, 92, 102, 104, 120, 122]; print("v=",v, " ",#v);print();
Cetal=vector(31);
BC=vector(#v+30,k, prodeulerrat(( p^k - k*p^(k-1) )/(p-1)^k, 1, nextprime(k+1)) );
MC=vector(#v+30,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+30,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=C11=C12=C13=C14=C15=C16=C17=C18=C19=C20=C21=0; C22=C23=C24=C25=C26=C27=C28=C29=C30=0; nn=vector(31);
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",C); if(C==Cetal[0+1],print1(" OK"),print1(" ERROR")); print(" ",C-Cetal[0+1]); print();print();
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]++;
write("i1-C12.txt", i1," C12 = ",C12);
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]++;
print1(i1," ",i2); printf(" C6 = %0.3f\n",C6);
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]++;
\\print1(i1," ",i2," ",i3); \\printf(" C7 = %0.3f\n",C7);
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]++;
))))) )));
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]++;
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 += 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 += 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 += t; nn[7]++;
))))) );
print(); print(concat(1,nn)); print();
|
|