欧拉计划 35

本文介绍了一种特殊的质数——循环质数,并通过编程的方式找出100万以下的所有循环质数。文章给出了筛选质数的方法及判断一个质数是否为循环质数的逻辑。

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

我们称197为一个循环质数,因为它的所有轮转形式: 197, 971和719都是质数。

100以下有13个这样的质数: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 和97.

100万以下有多少个循环质数?

def get_primes(n):
    """ n以下质数 """
    n_set = set(range(3, n, 2))
    n_set.add(2)
    for i in range(3, n, 2):
        if i in n_set:
            i_set = set(range(i * 2, n, i))
            n_set -= i_set
    return n_set


def get_circular(x):
    """ 
    x是否是循环质数
    判断13时,circular_list.extend([13, 31])
    """
    l = [prime]
    p_str = str(prime)
    for i in range(len(p_str) - 1):
        p = int(p_str[i + 1:] + p_str[0: i + 1])
        if p in l:
            continue
        if p not in primes_set:
            return None
        else:
            l.append(p)
    circular_list.extend(l)
    return None


n = 10 ** 6
primes_set = get_primes(n)

# 存储循环质数
circular_list = []
for prime in primes_set:
    if prime in circular_list:
        continue
    prime_str = str(prime)
    if prime > 10:
        for i in '024568':
            if i in prime_str:
                break
        if i in prime_str:
            continue
    get_circular(prime)
print(len(circular_list))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值