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 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)
以上实例输出结果为:
-99 21 261 1581
以下解析由 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。
参考方法:
参考方法:
思路:根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则打印出来:
参考方法:
#总体思路就是根据公式求得X1和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
力求使用最简单易读的方法解决问题:
Python3 测试:
因为题目说明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 下测试代码:
参考:
参考:
數學不好沒想到分解
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
先決定範圍
如果(i+1)^2 - i^2 > 168 則超出範圍, 找到i
完全平方定義開根號後為整數 =>
y**0.5 對1取餘數=0 且 z**0.5 對1取餘數=0