wsc810 发表于 2011-1-2 08:58:55

将单质数表为两数平方和的最快速算法

最近论坛讨论的问题有点少,那我就出个问题吧,设p是质数,当p较大时,求
p=x^2+y^2的最快速算法,已知有sqrt(p)的连分式的PQa算法可以给出一个确定性的算法.不知还是否还有其它较好的算法。

northwolves 发表于 2011-1-2 11:56:34

p=4n+1形式时才有解吧

mathematica 发表于 2021-2-24 10:26:27

https://bbs.emath.ac.cn/forum.php?mod=redirect&goto=findpost&ptid=15803&pid=78125&fromuid=865
程序的代码我已经替你写好了

uk702 发表于 2021-2-25 15:31:26

本帖最后由 uk702 于 2021-2-25 15:46 编辑

个人觉得这是个好方法,https://www.ams.org/journals/mcom/1972-26-120/S0025-5718-1972-0314745-6/S0025-5718-1972-0314745-6.pdf。

uk702 发表于 2021-2-25 20:38:49

以 p = 10^100 + 949 为例,使用 julia 验证上述结果(由于 10^100+949 是 8k+5 型素数,故选 c = 2)
a = big(10)^100 + 949; b = (a-1) >> 2; x0 = powermod(2, b, a); d = isqrt(a);
x1 = a % x0;
while x1 > d
x2 = x0 % x1;
x0, x1 = x1, x2
end
println((x1, x0 % x1))

得:(99697921470138519447541656418848509184628524016382, 7766881905507050845172598218029833369440123277895)
和 https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=15803&page=1#pid78125 第 7 楼的结果一致。

mathematica 发表于 2021-2-26 09:24:35

uk702 发表于 2021-2-25 20:38
以 p = 10^100 + 949 为例,使用 julia 验证上述结果(由于 10^100+949 是 8k+5 型素数,故选 c = 2)
a = b ...

那你知道pell方程x^2-A*y^2=B如何求解吗?

uk702 发表于 2021-2-26 10:13:42

mathematica 发表于 2021-2-26 09:24
那你知道pell方程x^2-A*y^2=B如何求解吗?

又找到了一个很牛叉的数论软件(还带代码),可以解你的问题\(x^2 - dy^2\) = n,见 frattini(d,n)。
但它有说了The algorithm works only for small d and n,由此看来,你的问题除了试算外,有没有通用算法可能还要打个问号。

请见:http://www.numbertheory.org/calc/krm_calc.html#
页: [1]
查看完整版本: 将单质数表为两数平方和的最快速算法