python偶数的平方_Python解题记录第三题

题目来源:菜鸟教程

百题地址:https://dwz.cn/Ol2QUMGD

题目序号:3

题目描述:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,

请问该数是多少?

【开动脑筋】

看到这个题目,我的第一个问题就是什么是完全平方数

开启百度:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。

抛开题目,先来练个手:找出100以内的完全平方数

for i in range(0,100):for j in range(0,i):if i==j*j:
print(i)

运行:

4

9

16

25

36

49

64

81

继续,根据题目去思考,该数加上100是完全平方数

修改程序

# 加上100for i in range(0,1000):for j in range(0,i):if i+100==j*j:
print(i)

运行

21

44

69

96

再继续,根据题目去思考,该数加上168是完全平方数,注意,这是第一个坑,不是加上168,而是再加上168,其实是加上原来那个数加上268,才是完全平方数

修改代码,实现

# 加上268for i in range(0,100):for j in range(0,i):if i+268==j*j:
print(i)

运行

21

56

93

那么两者都符合呢,继续思考,就是两者结果之交集嘛

修改代码,实现:

# 那么如何既满足加100,又满足加168呢
w=[]for i in range(0,100):for j in range(0,i):if i+100==j*j:
w.append(i)for i in w:for j in range(0,i):if i+268==j*j:
print(i)

运行结果:

21

Ok,完成!

但细想,这和以往的vb程序没什么差别,去找找库,能不能再简化一点

开方,开方,那不是math库里面的开方函数嘛,开方结果是浮点数,将该结果int一下,如果相同,那么开方的那个数就是完全平方数了

修改代码

import mathfor i in range(0,100):
m=math.sqrt(i+100)
n=math.sqrt(i+268)if m==int(m) and n==int(n):
print(i)

运行结果:

21

完美!

打开网站去看看答案,是不是相同,不是的,答案不对。

仔细看代码,原来坑不止一个,Python整数可没有范围,习惯性地进入到了0-100阶段

百度里还有一句话:完全平方数是非负数。

因为加上100是完全平方数,所以它的范围最小可以为-100,最大范围则还没有定

贴上网站答案分析,分析得还挺简单,我就不再展开了

分析:

假设该数为 x。

1、则:x + 100 = n2, x + 100 + 168 = m2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

7、接下来将 i 的所有数字循环计算即可。

代码:

for i in range(1,85):

if 168 % i == 0:

j = 168 / i;

if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :

m = (i + j) / 2

n = (i - j) / 2

x = n * n - 100

print(x)

看懂分析和程序代码,可能需要有数学计算公式的基础,在中职展开这个题目的教学,有点难度了。

【写在最后】

解答本题需要学生有for结构,if结构的知识基础,需要对完全平方数有所了解,对数学库的了解可以简化该题目的解答,当然里面一定要注意int函数的转换功能以及比较

本题的坑有两处,1是题目的文字游戏,不要看错了,2是范围问题,这个就需要一点点数学基础。

另外,开方功能其实可以用一个算法“二分法”来解决,我从网上找来了一段代码,不妨多加看看,有益于提升自我:

地址:https://blog.csdn.net/qiubingcsdn/article/details/82958107

该方法的作者:求兵

题目:给一个正整数num,写一个函数判断它是否是一个完全的平方数,是则返回True,不是返回False

代码:

def isPerfectSquare(self, num):

"""

:type num: int

:rtype: bool

"""

low = 1

high = num

while low < high:

mid = (low + high) // 2

if mid * mid == num:

return True

elif mid * mid < num:

low = mid + 1

else:

high = mid - 1

return low * low == num

【展示下一题】

题目序号:4

题目描述:输入某年某月某日,判断这一天是这一年的第几天?

你可能感兴趣的:(python偶数的平方)