/*** speed of order N^1.5 ****/ #include #ifndef N #define N (1<<16) #endif double lnp[N], xx[N]; unsigned e[N]; init_prime_logs() { unsigned h, i, j, k; extern double log(double); lnp[h=0]= 2; for (k=1,i=3;k= h) lnp[k++] = i; } for (k=0;k1 ;i++) if (!i || a[i] != a[i-1]) { if (h) printf("^%u",h+1); h=0; printf(" %u",a[i]); } else h++; if (i < nn) { if (h) printf("^%u",h+1); h= nn-i-1; printf(" %u", 1); } if (h) printf("^%u ",h+1); printf("\n"); } main() { unsigned i, j, k, n, m; double x, d, val; init_prime_logs(); j= n= m= 0; d= 0.0; val= 0.0; for (k=0;n x) x=xx[i], j=i; if (j==n) e[j]=0, n++; else if (j==m) m++; e[j]++; d += log(1.0+1.0/e[j]); val += lnp[j]; xx[j]= log(1.0+1.0/(e[j]+1))/lnp[j]; printf("x=%lf ",1.0/x); /** Li(1/x) is a good growth-factor **/ print_composite(k+1, val, d, e, n); } }