我做了一个寻找第n个质数的程序,现在我想编辑它来寻找第n个循环质数(一个即使你改变了数字的顺序也仍然保持质数的质数),但不知道如何让代码找出某个数字是否是循环质数。下面是我的代码
from math import sqrt
num=1
n=0
N=0
def prime(n):
squareroot=int(sqrt(n))
a=2
while a <= squareroot:
if n%a==0:
return False
a=a+1
return True
N=int(input('Number: '))
while(True):
num=num+1
if prime(num):
n=n+1
if n==N:
print(n,'th prime is ',num)
break
如果有谁能帮助我,我将非常感激
没有必要设置一个高得离谱的限制,因为10^23以下的循环质数不到50个 (http:/oeis.orgA293663 list) (https:/en.wikipedia.orgwikiCircular_prime。)
'''Circular primes'''
from math import ceil, sqrt
# this findfactors finds half of the factors, or in a square number half+1
findfactors = lambda x: [i for i in range(1, ceil(sqrt(x))) if x % i == 0]
# checks for primality for 1 factor (returns True for 1, but it isn't checked)
isprime = lambda x: True if len(findfactors(x)) == 1 else False
num = max(int(input('Enter the upper bound : ')), 2)
results = [2] # filtered out by the speedup check
for i in range(2, num):
i = str(i)
# speed things up a bit
if any([True if j in i else False for j in ('0', '2', '4', '5', '6', '8')]):
continue
searches = [int(i[j:]+i[:j]) for j in range(len(i))]
# all checks must be prime
if all([isprime(i) for i in searches]):
results.append(int(i))
# because number theory 11 is the only repeated digits prime
if 11 in results:
results.remove(11)
cmd = input('What number circular prime do you want (leave blank for all) : ')
if cmd == '':
print(results)
else:
try:
print(results[int(cmd)])
except IndexError:
print('There are not enough entries. Try increasing your upper bound.')
输入一个搜索的上界,以免花了很长时间,并选择你想要的数字循环素数(它使用python索引,所以对于第一个你想要的数字,输入0,以此类推),或者留空以查看整个列表。无论哪种方式,结果都会存储在 results