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));
}
Beispiel #3
0
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;
}