欢迎关注,敬请点赞!
100个50位数之和的前十位
分析
如今电脑的运算速度,能很快将这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
返回顶部
欢迎关注,敬请点赞!