Что-то он (от 10 июля выше) не на всех числах работает (первые 5 из 85 итераций):
Код:
N=101*577:
i=0, a=16, b=2, n=241, N=58277, R=287, R'=196
i=1, a=156, b=145, Ni=58725, s=207, k=139
i=2, a=157, b=148, Ni=58395, s=18446744073709551400, k=1
i=3, a=158, b=152, Ni=58296, s=18446744073709551395, k=1
i=4, a=159, b=156, Ni=58349, s=18446744073709551389, k=1
i=5, a=160, b=160, Ni=58384, s=18446744073709551383, k=1
(Код PARI/GP)
Код:
n=sqrtint(N);
R=(n+1)^2-N; Rs=N-n^2;
a=sqrtint(R); b=floor((Rs+a^2)/2/(n-a))+1; i=0;
print("i=",i,", a=",a,", b=",b,", n=",n,", N=",N,", R=",R,", R'=",Rs);
while(N%(n-a)!=0,
Ni=(n-a)*(n+a+2*b);
s=n-2*a-b;
k=ceil((sqrt(s^2+(Ni-N))+s)/3);
a=ceil(sqrt((n+b+k)^2-N)-(b+k));
b=ceil((Rs+a^2)/2/(n-a));
i++;
printf("i=%u, a=%u, b=%u, Ni=%u, s=%u, k=%u\n",i,a,b,Ni,s,k);
);
print(n-a,"*",N\(n-a));