Python 练习实例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 的所有数字循环计算即可。
程序源代码:
实例(Python 3.0+)
# 定义求解函数
def find_integer():
for i in range(2, 85): # i 的范围从 2 到 84
if 168 % i == 0: # i 是 168 的因子
j = 168 // i # 计算对应的 j
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0: # 确保 i 和 j 同为偶数或者奇数
m = (i + j) // 2
n = (i - j) // 2
x = n * n - 100
print(f"x: {x}, m: {m}, n: {n}")
# 调用求解函数
find_integer()
def find_integer():
for i in range(2, 85): # i 的范围从 2 到 84
if 168 % i == 0: # i 是 168 的因子
j = 168 // i # 计算对应的 j
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0: # 确保 i 和 j 同为偶数或者奇数
m = (i + j) // 2
n = (i - j) // 2
x = n * n - 100
print(f"x: {x}, m: {m}, n: {n}")
# 调用求解函数
find_integer()
实例(Python 2.0+)
#!/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)
# -*- 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
Python 100例
newbie
jij***qq.com
以下解析由 CosmosHua(cosmoscosmos@163.com)提供:
设该数为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)newbie
jij***qq.com
Joker
837***308@qq.com
参考方法:
#!/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)Joker
837***308@qq.com
laugh_boy
183***79195@163.com
参考方法:
#!/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 "符合条件的整数有:",xlaugh_boy
183***79195@163.com
矿泉的水
284***511@qq.com
思路:根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则打印出来:
#!/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矿泉的水
284***511@qq.com
小崔
105***3494@qq.com
参考方法:
#!/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小崔
105***3494@qq.com
colinshi
col***shi@hotmail.com
参考地址
colinshi
col***shi@hotmail.com
参考地址
AoXiaole
154***5738@qq.com
大家都通过了计算,然后,我根据前面同学的计算,居然把答案计算出来了,哈哈哈哈
过程:
引用楼上:
设该数为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
AoXiaole
154***5738@qq.com
Krystal
104***7454@qq.com
力求使用最简单易读的方法解决问题:
#!/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 )Krystal
104***7454@qq.com
小叶
cms***@qq.com
Python3 测试:
小叶
cms***@qq.com
Mr.Cat
151***03874@163.com
因为题目说明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)Mr.Cat
151***03874@163.com
oblivion
183***08542@163.com
参考:
for i in range(1, 17): for x in range(1, 168): if 168 - (i ** 2 + 2 * x * i) == 0: print x ** 2 - 100oblivion
183***08542@163.com
tony
lib***a@126.com
参考:
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()tony
lib***a@126.com
Ian
s09***83190@hotmail.com
數學不好沒想到分解
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
先決定範圍
如果(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 xIan
s09***83190@hotmail.com
小鱼
yil***23@sina.com
#!/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小鱼
yil***23@sina.com
runoob
you***you@126.com
参考方法:
''' 分析: x + 100 = m^2 x + 100 + 168 = n^2 n^2 - m^2 = 168 (n + m) * (n - m) = 168 n > m >= 0 n - m 最小值为 1 n + m 最大为 168 n 最大值为 168 m 最大值为 167 ''' def _test(): for m in range(0, 168): for n in range(m + 1, 169): #print('n=%s,m=%s' % (n, m)) if (n + m) * (n - m) == 168: print("该数为:" + str(n * n - 168 - 100)) print("该数为:" + str(m * m - 100)) print('n为%s,m为%s' % (n, m)) if __name__ == '__main__': _test()runoob
you***you@126.com