菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 基础教程
(追記) (追記ここまで)

Python 练习实例3

Python 100例 Python 100例

题目:一个整数,它加上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()

实例(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

Python 100例 Python 100例

AI 思考中...

15 篇笔记 写笔记

  1. #0

    newbie

    jij***qq.com

    103

    以下解析由 CosmosHua([email protected])提供:

    设该数为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

    9年前 (2017年05月31日)
  2. #0

    Joker

    837***[email protected]

    11

    参考方法:

    #!/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***[email protected]

    9年前 (2017年06月16日)
  3. #0

    laugh_boy

    183***[email protected]

    52

    参考方法:

    #!/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
    

    laugh_boy

    183***[email protected]

    9年前 (2017年06月18日)
  4. #0

    矿泉的水

    284***[email protected]

    6

    思路:根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则打印出来:

    #!/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***[email protected]

    9年前 (2017年06月19日)
  5. #0

    小崔

    105***[email protected]

    10

    参考方法:

    #!/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***[email protected]

    9年前 (2017年06月20日)
  6. #0
    #!/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)))
    #总体思路就是根据公式求得X1和X2,然后并集操作。得出结果。
    9年前 (2017年07月04日)
  7. #0

    AoXiaole

    154***[email protected]

    16

    大家都通过了计算,然后,我根据前面同学的计算,居然把答案计算出来了,哈哈哈哈

    过程:

    引用楼上:

    设该数为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***[email protected]

    9年前 (2017年08月14日)
  8. #0

    Krystal

    104***[email protected]

    46

    力求使用最简单易读的方法解决问题:

    #!/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***[email protected]

    9年前 (2017年09月28日)
  9. #0

    小叶

    cms***@qq.com

    26

    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]

    小叶

    cms***@qq.com

    9年前 (2017年10月05日)
  10. #0

    Mr.Cat

    151***[email protected]

    10

    因为题目说明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***[email protected]

    9年前 (2017年10月09日)
  11. #0

    oblivion

    183***[email protected]

    7

    参考:

    for i in range(1, 17):
     for x in range(1, 168):
     if 168 - (i ** 2 + 2 * x * i) == 0:
     print x ** 2 - 100

    oblivion

    183***[email protected]

    9年前 (2017年11月20日)
  12. #0

    tony

    lib***[email protected]

    1

    参考:

    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***[email protected]

    9年前 (2017年11月30日)
  13. #0

    Ian

    s09***[email protected]

    0

    數學不好沒想到分解

    一个整数,它加上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 x

    Ian

    s09***[email protected]

    9年前 (2017年12月02日)
  14. #0

    小鱼

    yil***[email protected]

    9
    #!/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***[email protected]

    9年前 (2018年01月09日)
  15. #0

    runoob

    you***[email protected]

    9

    参考方法:

    '''
    分析:
    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***[email protected]

    8年前 (2018年07月21日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /