python求完全平方数_【Python】【demo实验6】【练习实例】【完全平方数相关】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

假设该数为 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 的所有数字循环计算即可。

程序源代码(原为Python2.0):

#!/usr/bin/python

# encoding=utf-8

# -*- coding: UTF-8 -*-

# 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

# 解题思路:定义一个函数,以判断一个数是否为完全平方数

# 如果一个数x,x+100是一个完全平方数,x+268是另外一个完全平方数,那么可以肯定要寻找的数值 小于 x 的平方;

#验证是否为完全平方数

import math

def isSqr(n):

a = int((math.sqrt(n)))

return a * a == n

for i in range(100000000):

if i%10 in [0,1,4,5,6,9]:

if isSqr(i+100) and isSqr(i+268):

print(i,"##",(i+100)**0.5,"&&&",(i+268)**0.5)

我的源代码:

#!/usr/bin/python

# encoding=utf-8

# -*- coding: UTF-8 -*-

# 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

# 解题思路:先找出这个数的大概范围z

# 在通过定义的函数判断各个数是否为完全平方数,是否符合题目条件;

#验证是否为完全平方数

import math

def isSqr(n):

a = int((math.sqrt(n)))

return a * a == n

#自定义函数的返回值,对于完全平方数,返回True,非完全平方数返回False;

#通过这个循环判断答案的边界,为下一个循环输入参数;

#随着因数t的增加,其平方与t+1的平方之差会越来越多,所以通过这个规律设置这个循环

#题目中两个完全平方数之差为168

for y in range(0,10000):

if (y+1)**2-y**2>=168:

z=y**2+1 #range迭代时,不包含第二个参数

print("y:",y,"z:",z)

break

#最小数值应从-100开始

for i in range(-100,z):

if i%10 in [0,1,4,5,6,9]: #根据完全平方数的特性,个位数只能是这几个数。

if isSqr(i+100) and isSqr(i+268):

print(i,"##",(i+100)**0.5,"&&&",(i+268)**0.5)

输出结果:

C:\Python30_demo>python 018demo.py

y: 84 z: 7057

-99 ## 1.0 &&& 13.0

21 ## 11.0 &&& 17.0

261 ## 19.0 &&& 23.0

1581 ## 41.0 &&& 43.0

总共有四个数字,-99,1,21,261,1581

————————(我是分割线)————————

参考:

备注:

初次编辑时间:2019年9月22日23:37:37

环境:Windows 7   / Python 3.7.2

标签:平方,Python,demo,完全,##,实例,168,&&&,100

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值