计算将整数n分解为4个平方之和的方法数量

时间:2018-07-22 03:01:27

标签: c++ algorithm

对于整数N (0 <= N <= 10^7),并回答以下问题。

  

有多少种方法可以将整数n分解为4个平方的和?

示例:

  

给出文件NUMBER.INP中的整数n

NUMBER.INP
3

  

我们将结果写入文件NUMBER.OUT是将整数n分解为总和的方式。

NUMBER.OUT
4

结果为4,因为:

3 = 0^2 + 1^2 + 1^2 + 1^2
3 = 1^2 + 0^2 + 1^2 + 1^2
3 = 1^2 + 1^2 + 0^2 + 1^2
3 = 1^2 + 1^2 + 1^2 + 0^2

1 个答案:

答案 0 :(得分:2)

您必须应用两个定理来解决此问题。

  1. Lagrange's_four-square_theorem

  2. Jacobi's_four-square_theorem

第二个定理指出

  

如果n为奇数,则将n表示为四个平方之和的方式数是n的除数之和的八倍;如果n为偶数,则将其表示为n的奇数除数之和的24倍。

因此,最终,您的问题减少到寻找除数。可以在O(sqrt(n))时间上完成。由于您有多个查询,因此可以使用sieve of eranthoses

在O(log(n))时间内进一步优化。