#include #define mx 1000000 long long GCD(long long a,long long b){ return (a<=b) ? ((a==0) ? b : GCD(b%a,a)) : GCD(b,a); } struct Frac{ long long p,q; Frac::Frac(){ p = 0; q = 1; } Frac::Frac(long long y){ p = 1; q = y; } Frac::Frac(long long x, long long y){ long long c = GCD(x,y); p = (long long) x/c; q = (long long) y/c; } Frac Frac::operator+ (const Frac& b){ return Frac(p*b.q + b.p*q, q*b.q); } Frac Frac::operator- (const Frac& b){ return Frac(p*b.q - b.p*q, q*b.q); } }; long long i,n,a,minfree=1,maxd,maxn=70; bool used[mx+1]; Frac cand,opt,sum=Frac(); int main(){ for(i=1;i<=mx;i++) used[i]=false; printf("n A258252(n) A258254(n)\n"); for(n=1;n<=maxn;n++){ a=0; maxd=sum.q*sum.q*minfree; opt=Frac(maxd+1); i=minfree; while(i<=maxd){ if (i>mx){ printf("Overflow at step %lld\n",n); return 1; } if(used[i]){ i++; continue; } cand=sum+Frac(i); if (cand.q