首页 > 编程知识 正文

求n以内的循环素数

时间:2023-11-19 12:19:54 阅读:303344 作者:WNGU

循环素数是指一个数在循环移位后仍然是素数的数。素数是指只能被1和自身整除的正整数。在Python中,我们可以使用循环和判断来求解n以内的循环素数。

一、生成素数列表

我们首先需要一个函数能够生成素数列表,该函数接收一个参数n,返回一个包含1到n范围内的所有素数的列表。

def generate_prime_list(n):
    prime_list = []
    for num in range(2, n+1):
        if all(num % i != 0 for i in range(2, int(num**0.5)+1)):
            prime_list.append(num)
    return prime_list

这个函数使用了一个生成器表达式来判断一个数是否是素数。它遍历2到n的所有数,对每个数使用all函数判断是否满足对2到该数的开根号取整的范围内的所有数取模都不等于0,则将该数添加到素数列表中。

二、检查循环素数

得到素数列表后,我们可以定义一个函数来检查一个数是否是循环素数。该函数接收一个参数num,返回一个布尔值来表示是否是循环素数。

def is_circular_prime(num):
    str_num = str(num)
    for i in range(len(str_num)):
        rotated_num = int(str_num[i:] + str_num[:i])
        if not all(rotated_num % int(d) != 0 for d in str(rotated_num)):
            return False
    return True

这个函数首先将传入的数转换为字符串,然后对每个位置进行循环移位,并判断移位后的数是否仍然是素数。如果移位后的数有任何一个不是素数,则返回False,否则返回True。

三、求n以内的循环素数

有了素数列表和循环素数判断函数,我们可以写一个函数来求解n以内的循环素数。

def find_circular_primes(n):
    prime_list = generate_prime_list(n)
    circular_primes = []
    for prime in prime_list:
        if is_circular_prime(prime):
            circular_primes.append(prime)
    return circular_primes

这个函数首先调用generate_prime_list函数获得素数列表,然后遍历素数列表,对每个素数调用is_circular_prime函数判断是否是循环素数,如果是则将其添加到结果列表中。

四、测试

我们可以调用find_circular_primes函数来测试求解结果。

n = 100
circular_primes = find_circular_primes(n)
print(f"{n}以内的循环素数有:{circular_primes}")

运行上述代码,将输出100以内的循环素数。

以上就是使用Python求解n以内的循环素数的完整代码示例。通过生成素数列表和循环素数判断函数,我们可以方便地找到n以内的所有循环素数。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。