isPrime函数(列表+%运算符)

时间:2016-01-19 20:47:32

标签: python algorithm python-3.x primes

我正在尝试获取一个函数来确定N是否为素数。我是Python新手,我知道这可能不是解决这个问题的最有效方法,但这是我的尝试

def is_prime(N):
    k = []                                     #Creates a new list k
    for i in range(2,N):                       #For each i from 2 -> N
        r = N%i                                # r is the remainder of N % i
        k.append(r)                            # appends each remainder r to list k

        if (i == N-1):                         #Once index equals N-1, print list k
            print(k)           

        #For each element j in list k, check if each element in list k is 0
            for j in range (len(k)):        
                if k[j] != 0:             <---PROBLEM
                    return True
                else:
                    return False
print(is_prime(15))

我所拥有的逻辑是,当一个数字可以被1和它自身整除,并且不能被2到N-1的任何其他数字整除时,那么它就是素数。在上面的代码中,我无法比较列表k中每个元素的值。我想确定每个元素的值是否为k [j] == 0.如果每个元素k [j]!= 0 N%1 == 0 N%N == 0,那么它是素数!

有关如何解决此问题的任何想法?请参考以下链接以获取我的代码的可视化! http://goo.gl/IVIRz7

3 个答案:

答案 0 :(得分:2)

我建议解决如下:

def is_prime(n):
    i = 2
    while (i * i <= n):
        if (n % i == 0):
            return False
        i += 1
    return True

此代码适用于n >= 2

答案 1 :(得分:2)

import math

def is_prime(n):
    i = 3
    while (i <= math.sqrt(n)):
        if (n % i == 0):
            return False
        i += 2
    return True

这是最好的。上面的每个人都提到了它的变化。

答案 2 :(得分:0)

上述答案可行,但我想我会解释你的逻辑错误。你的英语推理是合理的,如果[2,N-1]之间的任何数字均分N,那么你就找到了一个非素数。

    for j in range (len(k)):        
        if k[j] != 0:             
            return True
        else:
            return False

如果k中的第一个数字为0,则此循环检查的实际情况。如果它非零,则该数字不会均匀地除N(注意这并不意味着其他数字均匀地划分n),因此该数字仍然可以可能为素数,但仅在余数为其余潜在除数的非零值。换句话说,你可以在看到余数为0时立即返回False,但只有当所有除数具有非零余数时才能返回True。

修正:

        for j in range (len(k)):        
            if k[j] == 0:
                return False
            return True 

返回True语句仅在我们设法在循环中完成而不返回False时执行。