0
def is_prime(x):
    list1 = []
    count = 1
    if x < 0:
        return False
    elif x == 1:
        return False
    elif x == 2:
        return True
    for item in range(x):
        list1.append(x - count)
        count += 1 
        if count == x:
            list1.remove(1)
    for item in list1:
        if x / item == 1:
            return False
    else:
        return True

这在某些数字上失败了,我不确定为什么。我很确定这主要是我的数学问题,或者我对素数的理解?我正在通过代码学院学习,所以请随时提示我正确的方向,而不是给我直接的答案。提前谢谢大家!

4

5 回答 5

1

看来您使用的是 Python 2,而 Python 3 和 Python 2 之间除法运算的差异导致了您的问题。在 Python 2 中,普通除法得到一个整数,例如 5/4=1,而在 Python 3 中,5/4=1.25。因此,在 python 2 中,5 可以被视为函数中的非素数。

除了除法之外,您可以尝试其他数学运算,例如模块%来进行判断。

于 2013-05-14T05:56:08.113 回答
0
import math
def is_prime(x):
    count = 0
    if x < 0:
        return False
    elif x == 1:
        return False
    elif x == 2:
        return True
    for n in range(1,int(math.ceil(math.sqrt(x)))+1): #only looks up to sqrt(x)
        if not x % n: #if n is divisor of x then it is factor
            count += 1
        if count > 1: #if we have 2 or more factors then it isn't a prime 
            return False
    return True

一些测试:

print(all(is_prime(p) for p in [2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89, 101, 113, 131]))
print(any(is_prime(np) for np in [1,4,6,8,9,10,12,14,15,16]))

>>> 
True
False
于 2013-05-14T05:55:12.620 回答
0

查看模运算符,它在两个数字相除时返回余数

>>> 4 % 2
0
>>> 5 % 2
1
于 2013-05-14T05:55:13.803 回答
0

试试这个我只测试了几个数字:

def is_prime(n):

    i = 2
    sq_root_n = n**0.5
    if n <= 0:
        return False
    while i < sq_root_n:
        if n % i == 0:
            return False
        i += 1
    return True
于 2013-05-14T08:17:46.490 回答
0
    def is_prime(x):
    maxdiv = x - 1
    if x < 2:
        return False
    elif x == 2:
        return True
    elif x >= 2:
        for n in range(2,maxdiv):
            if x % n == 0:
                print '%d is not prime. I divided it by %d' % (x, n)
                return False
        else:
            return True
于 2013-10-30T09:30:06.160 回答