Чтобы там не загромождать, отвечу тут
Вопрос лишь как из одного корня
? n=0;issquare(Mod(84848484,100^4),&n);n
%1 = Mod(82292022, 100000000)
получить три других: 7292022, 32292022, 57292022.
Из одного корня 82292022 можно получить ещё один 100^4-82292022=17707978
А вот для поиска остальных трех пар надо писать
-- 28.06.2025, 14:43 --Пока изучаю предмет
Советы по теме приму с благодарностью.
Это
Теорема Ферма — Эйлера и следствие из неё:
Цитата:
Натуральное число представимо в виде суммы двух квадратов (целых чисел) тогда и только тогда, когда ни одно простое число вида 4k+3 не входит в его разложение на простые множители в нечётной степени.
Численное разложение чисел в сумму квадратов обсосано до косточек тут
«Разложение числа в сумму двух квадратов»Магическая функция на pari/gp которая это делает мгновенно:
Код:
sqt(n)=my(s=Set(apply(vecsort,abs(thue(x^2+1,n)))),l=List(s));if(#l>0 && l[1][1]==0,listpop(l,1));return(Vec(l));
Например:
? sqt(85)
time = 7 ms.
%10 = [[2, 9], [6, 7]]-- 28.06.2025, 15:25 --1 - 1000000 215908 0.22 392547
Функция которая считает количество разложений:
Код:
sqn(c)=my(v=factor(c),a0=if(v[1,1]==2,v[1,2],0),v1=v,b=1,b4=0);for(i=1+(a0>1),#v[,1],b4=v[i,1]%4;if(b4==1,b=b*(v[i,2]+1));if(b4==3,if(v[i,2]%2!=0,return(0))));if(b%2==0,return(b/2));return((b-(-1)^a0)/2)
Ну и подсчёт до миллиона:
? c=0;s=0;n=0;for(i=2,10^6,n=sqn(i);c+=n;if(n,s++));print(s," ",c)
215908 392547
time = 6,025 ms.
?