【发布时间】: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 我是第一个点赞你的答案的,之前的评论是个玩笑,你的回答比我快