【问题标题】:Product of distinct prime numbers as a sum of perfect square作为完全平方和的不同素数的乘积
【发布时间】:2016-12-20 11:34:27
【问题描述】:

给定:k个不同的素数说a1,a2,.....,ak

目标:将给定素数的乘积写成完全平方和所需的最少完全平方数。

例子:

k = 2, a1 = 3, a2 = 5 a1*a2 = 15 = 9 + 4 + 1 + 1 即 4 个完全平方和

k = 3, a1 = 2, a2 = 5, a3 = 11 a1*a2*a3 = 110 = 100 + 9 + 1 即 3 个完美平方和

我的算法

p = a1*a2*...........*ak

counter = 0
while p != 0:
    find the largest perfect square <= p say z
    p = p-z
    counter = counter + 1
return counter

我已经测试了几个例子。在我看来,这似乎是正确的。但是根据少数例子来概括是不正确的。如何证明这一点(如果算法正确)?

【问题讨论】:

  • 这个算法是完全正确的,因为最小的完美平方是 1,所以你总是会得到一些数字;)
  • @Yola 这并不完美。看我的回答。
  • @square1001 我是第一个点赞你的答案的,之前的评论是个玩笑,你的回答比我快

标签: algorithm math primes


【解决方案1】:

解决方案对吗?

实际上,在这些情况下,您的解决方案是错误的:

  • k = 1, a1 = 61 =&gt; Your result: 61 = 49 + 9 + 1 + 1 + 1 / Best Result: 61 = 36 + 25
  • k = 2, a1 = 2, a2 = 37 =&gt; Your result: 74 = 64 + 9 + 1 / Best Result: 74 = 49 + 25


使用勒让德三平方定理的解决方案

Legendre's Three-square Theorem是所有自然数n,除了n是4^a (8b + 7)的形式,可以表示三个平方和。
还有Lagrange's Four-square Theorem,所有自然数都可以表示四平方和。

所以算法是:

  1. 计算n是否为4^a (8b + 7)的形式。您可以使用素数分解。如果是,答案是 4。
  2. 计算 n 是否为平方数。如果是,答案是 1。
  3. 计算 n 是否可以表示两个正方形。如果是,答案是 2。
  4. 如果 1-3 全部为假,则答案为 3。

您可以对O(sqrt(n)) 进行操作1,对O(log(n)) 进行操作2,对O(sqrt(n) * log(n)) 进行操作3,因此总体时间复杂度为O(sqrt(n) * log(n))

编辑: 由于 n 是一个不同的素数积,所以没有出现平方数,那么情况 2 也没有出现。 如果 n mod 8 = 7,则出现案例 1。

【讨论】:

  • 由于它是不同质数的乘积,12 的情况是不可能的。
  • 可能。请参阅我的第一个示例,它将满足案例 1
  • @user58697 我编辑并指定了案例 1 和 2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多