Python编程之欧拉计划(13~15)

欧拉计划

欧拉计划(Project Euler)。

13、求100个大数的和的前10位数字

100个数字我就不写了,放入个文本文件中去。读出来直接相加就行了。最后用肉眼判断前10位数字○| ̄|_

f = open("100numbers.txt")
print(sum(int(line) for line in f.readlines()))
f.close()

输出:
5537376230390876637302048746832985971773659831892672

14、最长的考拉兹序列

在正整数集上定义如下的迭代序列:
n ----> n/2 (若n为偶数) n ----> 3n + 1 (若n为奇数)
从13开始应用上述规则,我们可以生成如下的序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1。
  可以看出这个序列(从13开始到1结束)共有10项。虽然还没有被证明,但普遍认为,从任何数开始最终都能迭代至1(这就是“考拉兹猜想”)。计算从小于一百万的哪个数开始,生成的序列最长。

# 初始13为10步
c_max,n_max = 10,13
for i in range(14,1000000):
    num,cout = i,1
    while num != 1: #while 循环总会退出的
        if num %2 ==0:
            num = num // 2
        else:
            num = num *3 +1
        cout +=1
        
    if c_max < cout: # 退出while时若步数更多则保存步数及对应数字
        c_max,n_max = cout,i

print(c_max,n_max)

输出:
525 837799

15、求网格路径数量

从一个2×2方阵的左上角出发,只允许向右或向下移动,则恰好有6条通往右下角的路径。

对于20×20方阵来说,这样的路径有多少条?

分析:相当于走40步,其中20步向右,20步向下,总的走法数量也就是 C 40 20 = 40 ! 20 ! × ( 40 − 20 ) ! C_{40}^{20}=\frac{40!}{20!\times(40-20)!} C4020=20!×(4020)!40! 直接计算就行了

from operator import mul
from functools import reduce
# 计算组合数C(40,20)
print(reduce(mul,range(21,41))//reduce(mul,range(1,21)))

输出:
137846528820

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值