给定素数p,找到四个整数,使得p等于那些整数的平方和。
1< p< 10 ^ 12
如果p的形式为8n + 1或8n + 5,那么p可以写成两个平方的和。这可以用O(sqrt(p)* log(sqrt(p))来解决。但是对于其他情况,即当p不能写成两个平方的总和时,效率非常低。所以,如果有人的话,它会很棒可以提供一些我可以阅读的资源材料来解决问题。
答案 0 :(得分:0)
鉴于你的限制,我认为你可以做一个聪明的暴力。
首先,注意如果p = a ^ 2 + b ^ 2 + c ^ 2 + d ^ 2,则a,b,c,d中的每一个必须小于10 ^ 6。所以只需从0到sqrt(p)循环。考虑q = p - a ^ 2。很容易检查q是否可以使用Legendre's three-square theorem写成三个正方形的总和。一旦你发现q的值有效,a就固定了,你可以担心q。
以同样的方式处理q。循环从0到sqrt(q)的b,并考虑r = q - b ^ 2。 Fermat's two-square theorem告诉您如何检查r是否可以写成两个方格的总和。虽然此检查需要再次使用O(sqrt(r))时间,但实际上您应该能够快速找到有效的b值。
在此之后,找到适用于r的(c,d)对应该很简单。
由于用于查找a和b以及(c,d)的循环不是嵌套的,而是一个接一个地出现,因此复杂性应该足够低以适应您的问题。