Python 和 奥数 — 同余法求数值

Python 和 奥数 — 同余法求数值_第1张图片

扫码上面的二维码关注我的公众号!

视频教程:https://www.bilibili.com/video/av95752425/

今天为大家带来一道数论题。引用自公众号

匠心数学之小升初

多多爱数学,公众号:匠心数学之小升初今天为大家带来一道数论题。

   题目:有一个大于1的整数,除45,59,101所得的
        余数相同,求这个数。

中小学学生可在家长的陪读下一起学习。

解题思路:
       本题是一道数论题,考察的是求公因数。
       题目中虽然没有告诉我们,这个数除这三个数的余数是多少,但是已告知余数是相同的。那么,根据同余定理,45, 59, 101中任意两个数的差都能被这个数整除。

同余定理:设这个数是 x,除 45, 59, 101 所得的余数是 a,商分别是 k,l,m。
      则45=k*x+a,59=l*x+a,101=m*x+a,且 k       所以59-45=(l-k)* x,101-59=(m-l)*x,101-45=(m-k)*x。
      即14,42,56能被 x 整除。

解答:
     依题意,59-45 = 14, 101-59 = 42,  101-45 = 56
     根据同余定理,这个数能整除 14 和 42。
     求14和42的最大公约数,(42,14)=14;
     14=2*7,14的因数有 1,2,7,14。
     又因为这个数比1大,所以这个数可能为 2 或 7 或 14。


—————————— Python 程序设计  ———————————

根据题意的原始 Python 编码如下:

"""奥数题目:有一个大于 1 的整数,除 45、59、101         所得的余数相同,求这个数。"""        

answers = []        # 设置空列表,用于保存相关答案

for x in range(2, 45+1):      # 利用循环得到 2 到 45 的所有整数
    for y in range(2, 59+1):  # 循环得到 2 到 59 的所有整数
        for z in range(2, 101+1): # 循环得到 2 到 101 的所有整数
            if x == y == z and (45 % x == 59 % y == 101 % z):
                answers.append(x)
print(answers)

根据奥数解题思路,优化后的 Python 编码如下:

# 根据同余定理,这个数能整除 14、42 和 56,# 求三个差值的最大公约数

greatest_common_divisor = min(59-45, 101-59, 101-45)

# 依题求三个差值的最大公约数的大于 1 的约数。
answers = []   
for x in range(2, greatest_common_divisor+1):
    if greatest_common_divisor % x == 0:
        answers.append(x)
print(answers)

———————————— 练习题 —————————————

一个大于1的自然数去除280,225,190时,
得余数分别为a,a+2,a+5,则这个自然数是多少?

Python 和 奥数 — 同余法求数值_第2张图片

请扫码关注 CSDN 主页

Python 和 奥数 — 同余法求数值_第3张图片

请扫码关注 B站 主页

Python 和 奥数 — 同余法求数值_第4张图片

请扫码关注 知乎 主页

你可能感兴趣的:(Python)