给定: 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
我已经测试了几个例子。对我来说看起来是正确的。但是基于少数例子泛化是不正确的。如果算法正确,如何证明它呢?