0基础教程习题2—完全平方数

完全平方数


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小很多,这才是重点