用于检查数字是不是为素数的Python函数[重复]

Posted

技术标签:

【中文标题】用于检查数字是不是为素数的Python函数[重复]【英文标题】:Python function to check if number is prime [duplicate]用于检查数字是否为素数的Python函数[重复] 【发布时间】:2021-04-20 00:16:24 【问题描述】:
def is_prime(num):
    lst = []
    if num > 1:
        pass
    else:
        return False
    for number in range(0, 1000000+1):
        if str(num) in str(number):
            continue
        elif str(1) in str(number):
            continue
        elif str(0) in str(number):
            continue
        lst.append(number)
    for x in lst:
        if num % num == 0 and num % 1 == 0 and not(num % x == 0):
            return True
        else:
            return False

print(is_prime(9))

我不知道我的代码有什么问题,也找不到解决方案,程序的重点是检查数字是否是素数(素数只能被 1 和它自己整除)。 for 循环似乎不起作用或其他什么

【问题讨论】:

你为什么要把所有东西都变成字符串? (使用str() 虽然可行,@JohnD,但将 lambda 表达式分配给变量是一种不好的做法。如果需要,请使用def 任何数除以 1 余数始终为 0,因此 for 循环中的条件将保持为真 @JohnD ***.com/questions/25010167/… - 教人们养成短文的坏习惯是没有意义的,因为 *** 的初衷是什么,你不同意吗? :) @JohnD Guido van Rossum,Python 的创建者。他实际上想从 Python 3 中删除 lambda。他是 reduce 被移到 functools 后面的主要原因 【参考方案1】:
def isprime(n):
    return (all([False for i in range(2,n) if n % i == 0 ]) and not n < 2)
    
print (isprime(0))
print (isprime(1))
print (isprime(2))
print (isprime(3))
print (isprime(9))
print (isprime(10))
print (isprime(13))

输出:

False
False
True
True
False
False
True

或者:

def isprime(n):

    if n < 2: return False

    for i in range(2, n):
        if n % i == 0:
            return False
    else:
        return True

【讨论】:

第一个版本认为 2 不是素数,第二个版本认为 0 和 1 是素数 谢谢,我更正了(起初没有包括那些,但你是对的!)【参考方案2】:

第 16-19 行:

if num % num == 0 and num % 1 == 0 and not(num % x == 0):
    return True
else:
    return False

第一条语句num % num == 0 是在num 除以num 时求余数,num 始终为零,因此该语句始终为真。 num % 1 == 0 也总是正确的,所以你的代码相当于:

if not(num % x == 0):
    return True
else:
    return False

这意味着,在您的程序上下文中,“如果 lst 中的第一个值不是 num 的因子,则 num 是素数。否则,num 不是素数”

这只会运行一次循环并且是向后的。相反,您需要检查lst中的一个数字是否是返回False的因素,如果所有数字都是lst不是因素,则返回True

for x in lst:
    if num % x == 0:
        return False
return True

【讨论】:

【参考方案3】:
for x in lst:
    if num % num == 0 and num % 1 == 0 and not(num % x == 0):
        return True
    else:
        return False

这个循环只能运行一次,因为它保证在第一次迭代时返回真或假。如果您发现任何因素,您想返回False。否则,True

for x in range(2, num):
    if num % x == 0:
        return False
return True

(另外,我不确定str 恶作剧或num % num / num % 1 条件发生了什么,这两个条件始终为零。但这些应该是不必要的)

【讨论】:

严格来说,您不必让范围停止在 num-1,因为 python 范围不包括范围中的最后一个数字。为了速度,您还可以将范围设为range(2:int(math.sqrt(num)+1)) 啊,我不记得哪些语言有包含范围,哪些没有。感谢您指出这一点!【参考方案4】:

除了 2 本身,您应该只检查奇数的整除性,直到该值的平方根。

这是一个简短的版本:

def isPrime(N): 
    return all(N%p for p in range(3,int(N**0.5)+1,2)) if N>2 and N&1 else N==2

【讨论】:

以上是关于用于检查数字是不是为素数的Python函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查数字是不是为素数

python编写一函数用于判断输入的数是不是是素数。验证哥德巴赫猜想:一个不小7的偶数均可以表示为两个素数?

python 检查数字是否为素数

在python中检查字符串是不是为数字[重复]

golang 用于确定Go中的数字是否为素数的函数。

如何检查我的 python 对象是不是为数字? [复制]