求第n个循环素数[封闭式] 。

问题描述 投票:0回答:1

我做了一个寻找第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

如果有谁能帮助我,我将非常感激

python python-3.x primes
1个回答
1
投票

没有必要设置一个高得离谱的限制,因为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

© www.soinside.com 2019 - 2024. All rights reserved.