Python 和 奥数 — 同余法求数值

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

视频教程: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<l<m。
      所以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,则这个自然数是多少?

请扫码关注 CSDN 主页

请扫码关注 B站 主页

请扫码关注 知乎 主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方鹗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值