1. 问题描述:
能够表示为某个整数的平方的数字称为“平方数”。比如,25,64虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数。因为平方数的末位只可能是:[0, 1, 4, 5, 6, 9] 这6个数字中的某个。所以,4325435332必然不是平方数。
如果给你一个2位或2位以上的数字,你能根据末位的两位来断定它不是平方数吗?
请计算一下,一个2位以上的平方数的最后两位有多少种可能性?
来源:http://oj.ecustacm.cn/problem.php?id=1311
2. 思路分析:
理解清楚题目其实还是很简单的,举几个简单的例子就可以知道怎么样解决了,比如长度为3的平方数125 * 125,平方末尾的数字只与25 * 25的结果的后面两位数字是相关的,与其他位上的数字是无关的,例如101 * 101平方末尾的两个数字只与01 * 01相乘的结果是有关的,所以我们只需要计算[0,99]的平方数字的末尾两位数字,加入到set集合中去重即可,最后set集合的长度就是最终平方末尾两位数字的所有可能。最终的答案是22。
3. 代码如下:
if __name__ == '__main__':
rec = set()
i = 0
while i < 100:
s = str(i * i)
if len(s) >= 2:
rec.add(s[len(s) - 2: len(s)])
else:
rec.add("0" + s)
i += 1
print(rec)
print(len(rec))