我可以使用两个循环来检查所有小于 p
的质数的两个整数的组合,但这非常低效。是否有更好的算法来解决这个问题?有什么想法吗?
其中 p mod 4 = 1
。
谢谢。
我可以使用两个循环来检查所有小于 p
的质数的两个整数的组合,但这非常低效。是否有更好的算法来解决这个问题?有什么想法吗?
其中 p mod 4 = 1
。
谢谢。
p-i^2
将始终为整数。我认为你想要sqrt(p-i^2)
。 - Jim Mischel我可以建议你重新阅读Fermat's 4n+1 Theorem。
如果软件工程师使用正确的工具来完成工作,他们就会有简单的解决方案。我的Mathematica函数:
P[p_] := Reduce[-p + x^2 + y^2 == 0, {x, y}, Integers]
查找满足条件为 1 或 2(mod 4)的前几个质数 p 的解。
P /@ {2, 5, 13, 17, 29, 37, 41, 53, 61}
Reduce
函数存在 - 实际上,我不需要其他任何东西(这是构建查询的艺术)。Reduce[expr, vars, dom]
函数通过解方程或不等式来减少语句 expr
,并消除域 dom 上的量词。 - Margus
cstheory
是用于研究级别的。如果我错了,请纠正我。 - roxrookp == 1 (mod 4)
,这样对于非数学专业的人来说可能更容易理解。其中==
是我们实际写的最好的ASCII表示,当需要严谨时,我们会用一个 ≡ 字符,或者如果显而易见并且你懒得写的话,直接用=
就可以了。当然,如果你正式声明你完全在模4的整数环中工作,那么这将不会导致非常有趣的两个平方和分解... - Steve Jessopp=1 (mod 4)
对我来说非常清晰。 - ypercubeᵀᴹ