循环素数不正确的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 #

问题陈述:

数字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   # 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哦,我的天哪!。。非常感谢。我在这样一个愚蠢的错误上浪费了这么多时间。你应该把这个作为回应,因为现在这个问题仍然没有答案:(