问题重述:
[ 1024,2401; 1089,9801; 1296,2916; 1296,9216; 1369,1936; 1764,4761; 2916,9216; 4096,9604 ]
上述数对是1000~9999 的平方数,他们4个位数上所用到的数字是一样的。
问题分析:
1000~9999所有的平方数对应的平方根范围是32~99,二重遍历32~99,找出符合规则的数对{x,y}(x != y),打印。
伪代码的框架可以简化为:
i : 32 -> 99
j : i+1 -> 99
//相应的规则符合即打印i ,j
一个错误的想法:
按照上述伪代码框架,找出规则为解题的关键:
最初的错误想法是:
将 平方数 的4位数每一位数的和&积(除去0)求出来,都相等的即为符合的规则
结果:
多出来这样的数对:
{ 35(1225) , 71(5041) }
{ 47(2209) , 70(4900) }
{ 67(4489) , 94(8836) }
后来仔细考虑发现 忽略了4平方位数的合数位的质因数或者因数 可能在另一4位平方数上占据多位(有点绕口,但看上述三个特例就清楚了)