欧拉计划之——大数之和:100个50位数之和的前十位

博客探讨了如何在没有计算器的时代模拟欧拉大神解决大数之和的问题。通过Python自动生成100个50位数并求和,重点在于只计算前13位。结果展示前10位是5371990400,强调只计算前13位对结果无影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关注,敬请点赞!

分析

如今电脑的运算速度,能很快将这100个50位数进行求和,不过在欧拉大神那个年代是没有计算器的。
该问题的思路,是让我们将这100个50位数的前13位进行求和。

自动生成100个50位数,存入文档

import random, string

with open('D:/Python/欧拉计划/ep13.txt', 'a', encoding='utf8') as fp:
    for i in range(100):
        list1 = random.sample('123456789', 1)  # 第1位数不能是0
        for j in range(5):
            list1 += random.sample(string.digits, 10)  # 生成51个数字字符的列表
        list1[50] = '\n'  # 把第51个字符替换为换行符
        str1 = ''.join(list1)
        fp.write(str1)

求所有50位之和与只求前13位之和

因只需要求前十位,那么理论上50位数的13位之后对结果是没有影响的。

当然,我们也可以将这100个50位数求和也是很轻松的。

def front(m):  # 截取前m位数
    with open('D:/Python/欧拉计划/ep13.txt', 'r', encoding='utf8') as fp:
        list2 = []
        if fp.readable():
            line = 'a'
            while line:
                line = fp.readline()
                num1 = 0
                for i in line[:m]:
                    num1 = num1 * 10 + int(i)
                list2.append(num1)
        del (list2[100])
    return list2


def front_ten(lt):
    num2 = sum(lt)
    str2 = ''
    while num2:
        num2, n = divmod(num2, 10)
        str2 = str(n) + str2
    return str2[:10]


list3 = front(50)
list4 = front(13)
print(front_ten(list3), sum(list3))
print(front_ten(list4), sum(list4))

结果显示:

5371990400,5371990400847723723308746341894142246561998787033604
5371990400,537199040084725

返回顶部
欢迎关注,敬请点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值