int main() { //nmax = 1000; i64 nmax2 = nmax*nmax; i64 nmax3 = nmax*nmax2; vector<golomb> vg; vg.push_back(golomb(0,0,0)); vg.push_back(golomb(1,1,1)); vg.push_back(golomb(2,2,5)); while(vg.back().sum < nmax3){ get_next_elem(vg); } printf("%zu\n", vg.size()); int pos = 0; i64 total = 0; for(i64 i = 1; i < nmax; ++i){ i64 n3 = i * i * i; while(vg[pos].sum < n3){ ++pos; } i64 nstart = vg[pos].ns; i64 dn = (n3 - vg[pos-1].sum)/(pos); if(n3 == pos*dn + vg[pos-1].sum){ //printf("%lld %lld\n", i, nstart + dn-1); total += nstart + dn-1; }else{ //printf("%lld %lld\n", i, nstart + dn); total += nstart + dn; } } printf("%lld\n", total); }
void get_next_elem(vector<golomb>& vg) { int n = vg.size(); i64 nf = fn(n, vg); i64 nstart = vg.back().ns + vg.back().fn; i64 nsum = vg.back().sum + nf * n; vg.push_back(golomb(nstart, nf, nsum)); }
int main() { int n; n = 100; printf("golomb(%d) = %d\n", n, golomb(n)); #if 0 int k=2,l=2,c=2,j=1,m,t; for (c = 2; c < 100; ) { for(m=1;m<3;m++) { for(t=0;t<k;t++) { printf("%d => %d\n", c, l); c++; } l++; } k++; } #endif return 0; }