Код:
x=1234589012345;
F()=my(); if(abs(s-x)<err, err=abs(s-x); print(a,"^2...",b,"^2=",s,", len=",b-a+1,", err=",s-x));
{print("x=",x); t0=getwalltime();
a=0; if(issquare(x,&a), print(a,"^2=",x,", len=1, err=0"); quit;);
err=a=b=x;
for(n=2,oo,
t=a; a=ceil(sqrt(x/n)); if(a>t, a=t; b++; s+=b^2; F(); break);
b=a+n-1; s=b*(b+1)*(2*b+1)/6-a*(a+1)*(2*a+1)/6+a^2; F();
while(s>x && a>1 && err>0, s-=b^2; b--; F(); a--; s+=a^2; F(); );
);
while(a>1 && err>0,
while(s>x && b>a, s-=b^2; b--; F(); );
while(s<x && a>1, a--; s+=a^2; F(); );
);
print("Time: ",strtime(getwalltime()-t0)); quit;}
Код:
x=1234589012345
785681^2...785682^2=1234590838885, len=2, err=1826540
785680^2...785681^2=1234587696161, len=2, err=-1316184
641505^2...641507^2=1234589844110, len=3, err=831765
419961^2...419967^2=1234588329100, len=7, err=-683245
392837^2...392844^2=1234589267564, len=8, err=255219
296953^2...296966^2=1234589225191, len=14, err=212846
155563^2...155613^2=1234588923994, len=51, err=-88351
66382^2...66660^2=1234588929819, len=279, err=-82526
41049^2...41768^2=1234589091960, len=720, err=79615
27856^2...29363^2=1234589037214, len=1508, err=24869
25617^2...27374^2=1234589020079, len=1758, err=7734
10886^2...17092^2=1234589007175, len=6207, err=-5170
Time: 808 ms