列出以前的素数n

时间:2016-09-30 00:56:22

标签: python prime-factoring

我正在尝试在python中创建一个程序,它接受一个数字并确定该数字是否为素数,如果它是素数,我需要它列出它之前的所有素数。我的代码出了什么问题?

import math
def factor(n):
    num=[]
    for x in range(2,(n+1)):
        i=2
        while i<=n-1:
            if n % i == 0:
                break
            i = i + 1
        if i > abs(n-1):
            num.append(n)
            print(n,"is prime",num)
        else:
            print(i,"times",n//i,"equals",n)
    return

1 个答案:

答案 0 :(得分:0)

您的方法仅返回&#39; n&#39;是否是素数。 为此,您不需要嵌套循环。就像这样

def factor(n):
    num=[]
    for x in range(2,(n+1)):
        if n % x == 0:
            break
    if x > abs(n-1):
        num.append(n)
        print(n,"is prime",num)
    else:
        print(x,"times",n//x,"equals",n)
    return

然后,如果你想要所有其他素数小于n,你可以使用素数筛选算法。

---------更新--------------

您的代码的修改,可以找到其他素数(但主筛算法仍然有比这更好的性能)

def factor(n):
    num=[]
    for x in range(2,(n+1)):
        i=2
        while i<=x-1:
            if x % i == 0:
                break
            i = i + 1
        if i > abs(x-1):
            num.append(x)
    if n in num:
        print num
    else:
        print str(n) + ' is not num'
    return