首页 > 解决方案 > 我正在尝试从 Mersenner 素数列表中过滤掉,但它正在获取空值

问题描述

k=2
a=[]
while((((2**k)-1))<=upper):

    #using filter() to generate the list
    #in the form of 2^k-1
    result=filter(lambda x: x==((1<<k)-1),prime)
    a.append(list(result))
    k+=1

请帮助我,如果我做错了什么,请告诉我。我目前是 Python 新手,所以我没有太多知识。

标签: pythonfilter

解决方案


从这里使用高效函数列出 N 以下的所有素数的最快方法使用列表推导查找 Mersenne 素数的方法和我的类似代码可以完成这项工作。你可以在哪里填满你喜欢upperprime任何东西。

def mersenne_test(n):

    k = 0
    m = 0
    while m<=n:
        m = 2**k-1
        if(n==m):
            return "This number is a Mersenne number since it is equal by to 2**%d-1" % k
        k += 1
    return "This number is not a Mersenne number."

def primes(n):
    """ Returns  a list of primes < n """
    sieve = [True] * n
    for i in range(3,int(n**0.5)+1,2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
    return [2] + [i for i in range(3,n,2) if sieve[i]]

upper = 100
primes = primes(100)

for number in primes:
    print (mersenne_test(number))

推荐阅读