一道小学数学问题的编程解法

看一道小学数学题:

        有一个自然数,它被2除余1,被3除余2,被4除余3,被5除余4,被6除余5,被7除余6,被8除余7,被9除余8,请求出这个数。这个问题如果单从数学的角度来看,应该是可以解出的,但是貌似不是那么显而易见( 如果有用纯数学方法解出来的童鞋欢迎留言! )。作为一个程序员,我们使用程序员方法来尝试解决。

废话不说,直接上代码:

def gettheNums(N):
    for x in range(1,N):
        if x%2==1 and x%3==2 and x%4==3 and x%5==4 \
        and x%6==5 and x%7 == 6 and x%8 == 7 and x%9 == 8:
            print(x)
            
if __name__ == "__main__":
    gettheNums(10000)  # 先求出10000以内满足条件的自然数

# 返回信息

2519
5039
7559

这个程序很简单直观,很容易理解,其实是利用了计算机在短时间内强大的运算能力来暴力寻解。

当然,有没有办法适当的优化一下呢?

1)其实,显而易见的是这个数一定是奇数,因为该数被除余1,所以不可能为偶数;

这样,我们事实上可以优化掉一半的数字考虑(只考虑奇数);

2)被3除余2可不可以优化呢:

稍加分析,我们可以看出,由于这个数被9除余8,则 x = 9n+8 =可以推出=》  x = 3*3n+3*2+2 = 3*(3n+2) + 2 (小学数学知识吧 :))

从而我们看出这个数被9除余8 ==》 被3除余2;

这样我们可以在优化一半数的情况下再优化掉剩下的1/3考虑;

这样程序可以写成:

def gettheNums2(N):
    for x in range(1,N,2):   # 从1开始,step每次+2,保证是奇数
        if x%4==3 and x%5==4 and x%6==5 \    # 优化掉x%3==2
        and x%7 == 6 and x%8 == 7 and x%9 == 8:
            print(x)
            
if __name__ == "__main__":
    gettheNums2(100000)   #  这样可以得到10万以内满足条件的自然数

# 输出结果

2519
5039
7559
10079
12599
15119
17639
20159
22679
25199
27719
30239
32759
35279
37799
40319
42839
45359
47879
50399
52919
55439
57959
60479
62999
65519
68039
70559
73079
75599
78119
80639
83159
85679
88199
90719
93239
95759
98279

当然,还有没有进一步优化的方案,大家可以思考一下!

通过这个程序,我们看到怎么利用计算机程序来完成人脑不太擅长的繁琐暴力运算,也看到了简单的数学方法在

计算机编程中的优化作用。以此例子抛砖引玉,仅供大家参考!

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值