Python 确定整数是否为循环素数
我一直在试图解决欧拉计划的问题35,需要做一个函数,告诉我一个整数是否是循环素数。我有一个标准的Python 确定整数是否为循环素数,python,primes,Python,Primes,我一直在试图解决欧拉计划的问题35,需要做一个函数,告诉我一个整数是否是循环素数。我有一个标准的isprime函数和一个给出数字旋转列表的函数。我的旋转代码和iscircularprome代码如下: def rotate(n): rotlist = [] m = str(n) counter = 0 while counter < len(str(n)): m = m[1:] + m[0] rotlist.append(int
isprime
函数和一个给出数字旋转列表的函数。我的旋转代码和iscircularprome
代码如下:
def rotate(n):
rotlist = []
m = str(n)
counter = 0
while counter < len(str(n)):
m = m[1:] + m[0]
rotlist.append(int(m))
counter += 1
return rotlist
def iscircularprime(n):
np = [0,2,4,5,6,8]
y = str(n)
for j in y:
if int(j) in np:
return False
if isprime(n)==False:
return False
m = rotate(n)
for i in m:
if isprime(i)==True:
return True
else:
return False
def旋转(n):
rotlist=[]
m=str(n)
计数器=0
当计数器
我没有包括我的
isprime
函数,因为它是相当标准的。我的函数将正确识别素数是否为圆形,如197,但也将识别一些非圆形素数为圆形,如191,它不是圆形,因为119不是素数。在一次旋转后,您返回True
,因此您不会检查所有的圆形素数。您应该将其更改为:
def iscircularprime(n):
np = [0,2,4,5,6,8]
y = str(n)
for j in y:
if int(j) in np:
return False
if isprime(n)==False:
return False
m = rotate(n)
# new code here
is_circ_prime = True
for i in m:
if not isprime(i):
is_circ_prime = False
return is_circ_prime
未经测试,但我认为这是我多年前解决它的方法 最简单的方法是快速帮助:
from collections import deque
def shifter(num):
strnum = deque(str(num))
for i in xrange(len(strnum)):
yield int(''.join(strnum))
strnum.rotate()
然后:
这是一个循环任意数字的函数:
def circulate_number(A):
for v in range(len(str(A))):
a , i , s = str(A), len(str(A)), ''
for c in range(i):
s += str(a[(v+c) % i])
print(s)
v+= 1
circulate_number(123456)
强制性的低效一行解决方案。语句的左侧是质数检查器,右侧是旋转生成器:
from math import factorial as f
def is_circular_prime(n):
return (lambda s: all(f(i - 1) % i == i - 1 for i in (int(s[j:] + s[:j]) for j in range(len(s)))))(str(n))
for number in range(2, 10000):
if is_circular_prime(number):
print(number)
输出
> python3 test.py
2
3
5
7
11
13
17
31
37
71
73
79
97
113
131
197
199
311
337
373
719
733
919
971
991
1193
1931
3119
3779
7793
7937
9311
9377
>
啊,这是有用的,应该可以很好的解决问题了吧,谢谢大家的帮助
> python3 test.py
2
3
5
7
11
13
17
31
37
71
73
79
97
113
131
197
199
311
337
373
719
733
919
971
991
1193
1931
3119
3779
7793
7937
9311
9377
>