Python编程之欧拉计划49~50

欧拉计划

欧拉计划(Project Euler)。

49、找出由互为排列的4位数质数组成的序列

1487, 4817, 8147 这个序列,每个比前一个递增 3330,而且这个序列有两个特点:1. 序列中的每个数都是质数。 2. 每个四位数都是其他数字的一种排列。

1,2,3 位组成的三个质数的序列中没有具有以上性质的。但是还有另外一个四位的递增序列满足这个性质。

如果将这另外一个序列的三个数连接起来,组成的 12 位数字是多少?

def get_primes(n):
    primes = [True] * n
    primes[0] = primes[1] = False
    primes[4: n: 2] = [False] * len(primes[4: n: 2])
    for i in range(3, int(n ** 0.5) + 1, 2):
        if primes[i]:
            primes[i * i: n: i] = [False] * len(primes[i * i: n: i])
    return [k for k, p in enumerate(primes) if p and k > 1000]


prime_list = get_primes(10000)

for i in prime_list:
    i3, i6 = i + 3330, i + 6660
    if i3 in prime_list and i6 in prime_list:
        if sorted(list(str(i))) == sorted(list(str(i3))) == sorted(list(str(i6))):
            print(i, i3, i6)

输出:
1487 4817 8147
2969 6299 9629

50、100万以下的哪个质数能够写成最多连续质数的和

41 这个质数,可以写作 6 个连续质数之和:

41 = 2 + 3 + 5 + 7 + 11 + 13

这是 100 以下的最长的和为质数的连续质数序列。

1000 以下最长的和为质数的连续质数序列包含 21 个项,和为 953。

找出 100 万以下的最长的何为质数的连续质数序列之和。

100 万以下的哪个质数能够写成最长的连续质数序列?


def get_primes(n):
    primes = [True] * n
    primes[0] = primes[1] = False
    primes[4: n: 2] = [False] * len(primes[4: n: 2])
    for i in range(3, int(n ** 0.5) + 1, 2):
        if primes[i]:
            primes[i * i: n: i] = [False] * len(primes[i * i: n: i])
    return [k for k, p in enumerate(primes) if p]

N=1000000
primes = get_primes(N)
mini_list = [x for x in primes if x < N//200]
for lenth in range(len(mini_list), 5, -1):
    for i in range(0, len(mini_list) - lenth + 1):
        # 取出长度为lenth的连续质数累加求和
        tmp = sum(mini_list[i:i + lenth])
        if tmp > N:
            break
        elif tmp in primes:
            print(f'{tmp}是{lenth}个连续质数之和')
            exit()

输出:
997651是543个连续质数之和

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值