python2.7练习小例子(三)
3):题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:假设该数为 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 的所有数字循环计算即可。
程序源代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*- 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)
以上实例输出结果为:
-99
21
261
1581
再来看其它的例子:设该数为x:x + 100 = n^2, n^2 + 168 = m^2。设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。解得n=84/k - k/2;由于n,k均为自然数,则nk>=1,故1<=k^2<168,故1<=k<=12。
#!/usr/bin/env python
for x in range(1, 13):
a = 84/x -x/2
if int(a) == a:
n = a ** 2 - 100
print(n)
再来看另外一个:
#!/usr/bin/python
# -*- coding: UTF-8 -*- for i in range(1, 85):
if 168 % i == 0:
j = 168 / i
if i > j:
m = (i + j )/2
n = (i - j )/2
if m * m - 268 == n * n - 100 and (n * n - 100) % 1 == 0:
print('x = ', m * m - 268)
还有一个如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*- for m in range(168):
for n in range(m):
if (m+n)*(m-n)==168:
x=n**2-100
print "符合条件的整数有:",x
根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则打印出来:
#!/usr/bin/python
# -*- coding: UTF-8 -*- i = 1
#求出最大范围
while ((i+1)*(i+1)-i*i) <= 168:
i += 1
#循环测试并打印
for j in range(1,i):
for k in range(1,i):
if (k*k - j*j) == 168:
print k*k-268
再来看一个:
#!/usr/bin/python
# -*- coding: UTF-8 -*- #一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? '''
分析:
设这个整数为x
1、 x+100=n^2和x+100+168=m^2
推出 m^2-n^2=168
即 (m+n)(m-n)=168
设 m+n=i m-n=j
则 i*j=168
由 i>0 j>0 推出 i%2=0 j%2=0
由 168=2*2*2*3*7
上面两个条件推出i与j值的范围[2,4,6,12,14,28,42,84]
反推:m=(i+j)/2和n=(i-j)/2 并且 n>0 推得 i>j
则 i=[14,28,42,84]
j=[12,6,4,2]
''' arr1=[14,28,42,84]
arr2=[12,6,4,2]
for i in range(0,4):
m=(arr1[i]+arr2[i])/2
n=(arr1[i]-arr2[i])/2
x=n*n-100
print x
思路就是根据公式求得X1和X2,然后并集操作。得出结果:
#!/usr/bin/python
# -*- coding: UTF-8 -*- #X1=N*2-100的合集
x1 = map(lambda i:i**2-100,range(1,100)) #X2=M*2-100-168的合集
x2 = map(lambda i:i**2-100-168,range(1,100)) #两个合集求并集结果
print(set(list(x1)) & set(list(x2)))
设该数为x:x + 100 = n^2, n^2 + 168 = m^2。设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。在此基础上 k(k+2n)=168 , 若 k为奇数,k+2n也为奇数,等式不成立,所以k为偶数。则等式除以4,得(k/2)(k/2+n) =42, 令 t=k/2, (t>0)。t(t+n)=42 则 n= 42/t -t ; 由于n大于0,所以 t小于等于6 ,42/t 又是整数,得到 t 的取值为 1,2,3,6。对应得到 x =1581,261,21,-99。这是纯算出来的。
力求使用最简单易读的方法解决问题:
#!/usr/bin/python
# -*- coding:utf-8 -*- t = []
for m in range(168):
for n in range(m):
if m**2 - n**2 == 168:
x = n**2 - 100
t.append(x)
print('符合条件的整数有:',t )
来看Python3 测试:
>>> print([n**2-100 for m in range(168) for n in range(m) if(m+n)*(m-n)==168])
[-99, 21, 261, 1581]
因为题目说明x是整数,但没有说明n和m一定大于零,此处考虑了n和m小于零的情形。x+100=n^2;x+100+168=m^2;(注意,没有要求m,n一定大于零)。m^2-n^2=168 即 (m+n)(m-n)=168。设 m+n=i,m-n=j,则m=(i+j)/2;n=(i-j)/2 有 i*j=168, 因为 m,n 都是整数且 m!=n, 所以 j,i!=0, 因为i*j是正数,故 abs(i)>=1,abs(j)>=1。所以i和j的上限可以取 168。因此m和n的上限也是168,下限可以取-168(注意,m,n的取值范围可以放得很大,不影响结果,因为限制条件可以自己去约束,但所取的范围一定要比真实范围大)。Python3 下测试代码如下:
x=[]
for m in range(-168,169):
for n in range(-168,169):
if (m+n)*(m-n)==168:#m,n都是整数
x.append(n**2-100)
x=set(x)#用集合的方法去掉重复值
x=list(x)#将集合类型改为列表类型
print('要求的值为:',x)
还有一个参考:
for i in range(1, 17):
for x in range(1, 168):
if 168 - (i ** 2 + 2 * x * i) == 0:
print x ** 2 - 100
再来一个参考:
class Num:
def __init__(self):
pass
def calc(self):
for i in range(2,86):
for j in range(2,86):
if (i * j == 168) and (i > j):
#print(i,j)
if ((i % 2 == 0) and (j % 2 ==0)) or ((i % 2 != 0) and (j % 2 !=0)):
n = (i-j)/2
d = int(n*n -100)
print(d)
a = Num().calc()
先決定範圍,如果(i+1)^2 - i^2 > 168 則超出範圍, 找到i。完全平方定義開根號後為整數 =>。y**0.5 對1取餘數=0 且 z**0.5 對1取餘數=0:
i=0
while i^2 < 168:
i+=1
for x in range(-i**2,i*i):
y=x+100
z=y+168
a=complex(y+0j)**0.5%1
b=complex(z+0j)**0.5%1
c=a%1
d=b%1
if c== d == 0:
print x
最后来看个例子:
#!/usr/bin/python
# coding=utf-8 # x^2 + 168 = y^2,则x、y都小于168,而且x应小于y
for y in range(168):
for x in range(y):
if y**2 - x**2 == 168:
n = x**2 - 100
print n
不得不说,奇思妙想啊。。。对于本人来说,很难达到这种程度的。如果感觉不错的话,请多多点赞支持哦。。。
python2.7练习小例子(三)的更多相关文章
- python2.7练习小例子(十二)
12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...
- python2.7练习小例子(二十九)
29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...
- python2.7练习小例子(十)
10):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析:兔子的规律为数列1,1 ...
- python2.7练习小例子(八)
8):题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 程序源代码: #!/usr/bin/python # -*- coding: ...
- python2.7练习小例子(七)
7):题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:]. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- python2.7练习小例子(二十七)
27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. #!/usr/bin/python # -*- coding: UTF-8 -* ...
- python2.7练习小例子(二十八)
28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...
- python2.7练习小例子(二十四)
24):1.题目:利用递归方法求5!. 程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...
- python2.7练习小例子(二十三)
23):题目:求1+2!+3!+...+20!的和. 程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
随机推荐
- IntelliJ IDEA sass环境配置及常见报错处理
1.下载安装ruby,网上教程很多的,安装完之后在命令行输入ruby -v检查一下是否安装成功了.(注意安装的时候要勾选第二项).
- Python内置函数(53)——setattr
英文文档: setattr(object, name, value) This is the counterpart of getattr(). The arguments are an object ...
- Mego开发文档 - 数据注释建模
数据注释建模 Mego框架使用一组约定来基于CLR类来构建模型.您可以指定其他配置来补充或覆盖通过约定发现的内容. 在 Mego 中所有的数据对象必须要有主键.这里需要声明与EF不同的是框架只支持数据 ...
- Mego开发文档 - 处理并发冲突
处理并发冲突 数据库并发是指多个进程或用户同时访问或更改数据库中的相同数据的情况.并发控制是指用于确保存在并发更改时数据一致性的特定机制. Mego实现了乐观并发控制,这意味着它可以让多个进程或用户独 ...
- spring6——AOP的编程术语
面向切面编程作为一种编程思想,允许我们对程序的执行流程及执行结果动态的做出改变,以达到业务逻辑之间的分层管理或者是目标对象方法的增强,spring框架很好的实现了这种编程思想,让我们可以对主业务逻辑和 ...
- 赛码网算法: 军训队列( python实现 )
军训队列 题目描述某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出 ...
- Struts(九):值栈(OGNL)
引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...
- 如何在node和vue前后端分离的项目中使用极客验证,用node的方式
1.用express的脚手架和vue-cli的脚手架搭建的项目目录如下图 2.在vue-client的src/component新建一个login.vue文件,作为登录页面,代码如下 <temp ...
- [LeetCode] Cut Off Trees for Golf Event 为高尔夫赛事砍树
You are asked to cut off trees in a forest for a golf event. The forest is represented as a non-nega ...
- c++类与对象(1)——构造,复制构造函数
CPP的类与对象: 当我们定义一个基本类型变量时,方法如下: int p; #定义一个int类型变量 bool b; #定义一个bool类型变量 float c ; #定义一个float类型变量 显然 ...