用于检查数字是不是为素数的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函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章