将两个方格的总和表示为素数的最快算法是什么?

时间:2011-03-21 16:06:36

标签: algorithm math number-theory

我可以使用两个循环来检查小于p素数的两个整数的所有组合,但效率非常低。有没有更好的算法来解决这个问题?任何的想法?

p mod 4 = 1

谢谢,

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

您无需搜索所有组合。一个简单的天真实现的大致轮廓将是:

  • 考虑[1..trunc(sqrt(p))]。
  • 范围内的每个整数i
  • 计算sqrt(p-i ^ 2)并检查它是否为整数。如果是这样,你就完成了。
  • 如果没有继续下一个i。

这是否足以满足您的需求?对于相对较小的p,它可以正常工作,但对于密码学中使用的大型素数来说显然会很慢。

答案 2 :(得分:0)

我建议你重读Fermat's 4n+1 Theorem

如果软件工程师使用正确的工具来完成工作,那么您的解决方案就很简单。我的Mathematica功能:

P[p_] := Reduce[-p + x^2 + y^2 == 0, {x, y}, Integers]

示例:

找到前几个素数p的解,它们是1或2(mod 4)。

P /@ {2, 5, 13, 17, 29, 37, 41, 53, 61}

enter image description here