完全平方数
1、题目要求
打印10000以内的完全平方数
2、程序分析
所谓完全平方数,就是可以表示为某个整数的平方的数,例如9,是3的平方,16是4的平方,9和16都是完全平方数
3、示例代码
#coding=utf-8
index = 1
while True:
number = index*index
if number > 10000:
break
print number
index += 1
4、加大难度
现在提一个新的要求,有这样的数,如果这个数加100是一个完全平方数,加268也是一个完全平方数,求10000以内所有符合这个要求的数值
示例1
import math
for i in range(10000):
#转化为整型值
x = int(math.sqrt(i + 100))
y = int(math.sqrt(i + 268))
if(x * x == i + 100) and (y * y == i + 268):
print i
程序思路的关键在于 x * x == i +100 ,这表明i + 100是一个完全平方数
示例2
#coding=utf-8
index = 1
number_set = set()
while True:
number = index*index
if number > 10268:
break
index += 1
number_set.add(number)
for item in number_set:
if (item + 168) in number_set:
print item - 100
程序分析
- 有一个数,假设加100后的值为A,加268之后的值是B,根据题目要求,A和B都是完全平方数,那么B-A = 168
- 程序先找出10268以内的所有完全平方数,然后遍历,如果一个完全平方数加168 以后还是完全平方数,那么这个完全平方数减去100,就是要找的数值
- 想想为什么要找10268以内的完全平方数而不是10000以内
经过计算,-99 也符合要求,是是示例1没有给出的答案,不过这不重要
示例2的计算量要比示例1小很多,这才是重点