Python编程之欧拉计划28~30

本文介绍了欧拉计划中的三道题目:28题求1001×1001的螺旋中对角线上数字之和,答案为669171001;29题寻找序列中不同的项数,共有9183项;30题找出所有能被写成各位数字五次方之和的数之和,结果为443839,并列举了部分符合条件的数。
摘要由CSDN通过智能技术生成

欧拉计划

欧拉计划(Project Euler)。

28、求1001×1001的螺旋中对角线上数字之和

从数字1开始向右顺时针方向移动,可以得到如下的5×5的螺旋:
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13

可以算出对角线上数字之和是101.

1001×1001的螺旋中对角线上数字之和是多少?

分析:
n为奇数,右上角的元素为n×n,左上角的元素为n×n-n+1,左下角的元素为n×n-n+1-n+1,右下角的元素为n×n-n+1-n+1-n+1,单层为 4 n 2 − 6 n + 6 4n^2-6n+6 4n26n+6

ans =1
for i in range(3,1002,2):
    ans += 4*i*i -6*i +6
print(ans)

输出:
669171001

29、序列的项数

考虑 a b : 2 ≤ a ≤ 5 , 2 ≤ b ≤ 5 a^b : 2 ≤ a ≤ 5 , \quad 2 ≤ b ≤ 5 ab:2a5,2b5:
2 2 = 4 , 2 3 = 8 , 2 4 = 16 , 2 5 = 32 3 2 = 9 , 3 3 = 27 , 3 4 = 81 , 3 5 = 243 4 2 = 16 , 4 3 = 64 , 4 4 = 256 , 4 5 = 1024 5 2 = 25 , 5 3 = 125 , 5 4 = 625 , 5 5 = 3125 2^2=4, 2^3=8, 2^4=16, 2^5=32\\ 3^2=9, 3^3=27, 3^4=81, 3^5=243\\ 4^2=16, 4^3=64, 4^4=256, 4^5=1024\\ 5^2=25, 5^3=125, 5^4=625, 5^5=3125 22=4,23=8,24=16,25=3232=9,33=27,34=81,35=24342=16,43=64,44=256,45=102452=25,53=125,54=625,55=3125
如果将这些数字排序,并去除重复的,我们得到如下 15 个数字的序列:

4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

a b : 2 ≤ a ≤ 100 , 2 ≤ b ≤ 100 a^b : 2 ≤ a ≤ 100 , \quad 2 ≤ b ≤ 100 ab:2a100,2b100 下生成的序列中有多少个不同的项?

print(len(set([a ** b for a in range(2, 101) for b in range(2, 101)])))

输出:
9183

30、找出所有能被写成各位数字五次方之和的数之和

令人惊奇的,只有三个数能够写成它们各位数的四次方之和:
1634 = 1 4 + 6 4 + 3 4 + 4 4 8208 = 8 4 + 2 4 + 0 4 + 8 4 9474 = 9 4 + 4 4 + 7 4 + 4 4 1634 = 1^4 + 6^4 + 3^4 + 4^4 \\ 8208 = 8^4 + 2^4 + 0^4 + 8^4 \\ 9474 = 9^4 + 4^4 + 7^4 + 4^4 1634=14+64+34+448208=84+24+04+849474=94+44+74+44
1 = 14 没有被算作在内因为它不是一个和。

这些数字的和是 1634 + 8208 + 9474 = 19316.

找出所有能被写成各位数字五次方之和的数之和。

分析:
显热符合要求的数不会大于 6 × 9 5 = 354294 6\times9^5=354294 6×95=354294

ans = []
for i in range(100, 354294):
    if sum(n ** 5 for n in map(int, list(str(i)))) == i:
        ans.append(i)
print(sum(ans), ans)

输出:
443839 [4150, 4151, 54748, 92727, 93084, 194979]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值