循环素数不正确的Python程序输出
问题陈述: 数字197被称为循环素数,因为数字197、971和719的所有旋转本身都是素数 100以下有13个这样的素数:2、3、5、7、11、13、17、31、37、71、73、79和97 一百万以下有多少个循环素数 我的问题 我检查了所有代码,发现二进制搜索函数在输出print success时给出了return1语句。但最终列表中没有添加任何内容。请帮忙 Python中的程序:循环素数不正确的Python程序输出,python,primes,Python,Primes,问题陈述: 数字197被称为循环素数,因为数字197、971和719的所有旋转本身都是素数 100以下有13个这样的素数:2、3、5、7、11、13、17、31、37、71、73、79和97 一百万以下有多少个循环素数 我的问题 我检查了所有代码,发现二进制搜索函数在输出print success时给出了return1语句。但最终列表中没有添加任何内容。请帮忙 Python中的程序: from time import time start = time() LIMIT = 1000000 #
from time import time
start = time()
LIMIT = 1000000 # largest limit of the prime numbers
prima = [] # list of primes later to be filled by primes function
# binary search function
def Bsearch(lsta,low,high,search):
if low>high:
return -1
else:
mid = int((low+high)/2)
if search<lsta[mid]:
Bsearch(lsta,low,mid-1,search)
elif search>lsta[mid]:
Bsearch(lsta,mid+1,high,search)
elif search==lsta[mid]:
print("Success!")
return 1
# prime number generating function
# uses sieve of Era** algorithm
# produces correct result tested
def primes(LIMIT):
lsta = {} # temporaty empty dictionary
for i in range(2,LIMIT):
lsta[i] = 1
for i in range(2,LIMIT):
for j in range(i,LIMIT):
if i*j>LIMIT:
break
lsta[i*j] = 0
for i in range(2,LIMIT):
if(lsta[i]==1):
prima.append(i)
primes(LIMIT)
final = []
for item in prima:
x = int(str(item)[::-1])
# real problem here the following statement not inserting any value in final list
if(Bsearch(prima,0,len(prima)-1,x)):
print("Hello!")
print(final)
final.append(item)
print(final)
从时间导入时间
开始=时间()
LIMIT=1000000#素数的最大极限
prima=[]#后面将由primes函数填充的primes列表
#二进制搜索函数
def B搜索(lsta、低、高、搜索):
如果低>高:
返回-1
其他:
中=整数((低+高)/2)
如果searchlsta[mid]:
B搜索(lsta、中+1、高、搜索)
elif search==lsta[mid]:
打印(“成功!”)
返回1
#素数母函数
#使用Era**算法的筛选
#产生正确的测试结果
def充注量(限值):
lsta={}#临时空字典
对于范围(2,极限)内的i:
lsta[i]=1
对于范围(2,极限)内的i:
对于范围内的j(i,极限):
如果i*j>限制:
打破
lsta[i*j]=0
对于范围(2,极限)内的i:
如果(lsta[i]==1):
主附加(一)
素数(极限)
最终=[]
对于prima中的项目:
x=int(str(项目)[:-1])
#这里真正的问题是下面的语句没有在最终列表中插入任何值
如果(b搜索(prima,0,len(prima)-1,x)):
打印(“你好!”)
打印(最终版)
最后。追加(项目)
打印(最终版)
快速生成素数
并列出循环素数
def primes(max_n):
numbers = range(3, max_n+1, 2)
half = (max_n)//2
initial = 4
for step in xrange(3, max_n+1, 2):
for i in xrange(initial, half, step):
numbers[i-1] = 0
initial += 2*(step+1)
if initial > half:
return [2] + filter(None, numbers)
def rotate(S_list):
S=[]
for i in range(len(S_list)):
S.append(int(S_list[i:]+S_list[:i]))
return set(S)
def circularPrime(limit):
All_primes_in_limit = primes(limit)
circular_prime=[]
reject_list=['0','2','4','5','6','8']
All_primes_in_limit=[i for i in All_primes_in_limit if not any(j in reject_list for j in set(str(i)))]
while All_primes_in_limit:
ShufleSet=rotate(str(All_primes_in_limit[-1]))
PrimesSet=set(All_primes_in_limit)
if not ShufleSet - PrimesSet:
circular_prime+=list(ShufleSet)
All_primes_in_limit=list(PrimesSet-ShufleSet)
circular_prime.sort()
return circular_prime
#for limit value 1000000
print circularPrime(1000000)
这是循环素数列表的最快算法
递归调用中缺少return语句。而且,-1是真值;返回正确或错误的布尔值。@Wooble哦,我的天哪!。。非常感谢。我在这样一个愚蠢的错误上浪费了这么多时间。你应该把这个作为回应,因为现在这个问题仍然没有答案:(