素数是只能被自身和 1 整除的数。 例如,数字 5 是素数,因为它只能被 1 整除 和 5. 然而,数字 6 不是质数,因为它可以被整除 2 和 3。
编写一个名为 is_prime 的布尔函数,它接受一个整数作为参数 如果参数是素数则返回 true,否则返回 false。使用 程序中提示用户输入数字然后输入的功能 打印该数字是否为质数。
这是我输入的PYTHON代码,但它告诉我这是错误的。我已经尝试过,但无法获取。
if num > 1:
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
break
else:
print(num,"is a prime number")
else:
print(num,"is not a prime number")
你快明白了。
break
在错误的位置并且不能有(并且不想/不需要)两个 else
子句:
if num > 1:
for i in range(2,num):
if (num % i) == 0:
print(num,"is not a prime number")
print(i,"times",num//i,"is",num)
break
else:
print(num,"is a prime number")
您需要整理两个 else 语句,并更改算法,以便在 for 循环的所有迭代都失败时仅打印
num
is a prime number
if num < 2: # catch 1 and anything less than zero
print(num, "is not a prime number")
else:
prime = True
for i in range(2, num):
if num%i == 0:
print(num, "is not a prime number")
print(i,"times",num//i,"is",num)
prime = False
break
if prime:
print(num,"is a prime number")
我会将其放入 isPrime 函数中。您只需检查直到数字平方根的因数。
编辑:我在你的问题中看到你提到了这一点,你只需要修改此代码即可返回
True
或 False
def isPrime(num):
if num < 2:
return False
for i in range(2,num):
if num%i==0:
return False
return True
输出
0 is not a prime number
1 is not a prime number
2 is a prime number
3 is a prime number
4 is not a prime number
2 times 2 is 4
5 is a prime number
6 is not a prime number
2 times 3 is 6
7 is a prime number
8 is not a prime number
2 times 4 is 8
9 is not a prime number
3 times 3 is 9
我花了一些时间在 Python 中开发了一个快速但准确的
is_prime
函数。这是:
from math import sqrt # you can just import math, but I only use sqrt
def is_prime(n):
if n<0:
n*=-1
if n<2:
return False
for i in range(2,int(sqrt(n))+1): # remember to fix sqrt to math.sqrt if you changed the
if n%i==0: # import to import math instead of from math import sqrt
return False
return True
说明: 如果 x 是素数,则 -x 是素数。所以我只是用
使数字为正if n<0:
n*=-1
0 是合数(它具有因数 1, 2, 3, 4, 5, ...),而 1 都不是,而且它们都不是质数,并且由于 n>-1 (因为它是绝对值),因此条件<2 will suffice.
if n<2:
return False
之后,我从 2 循环到
int(math.sqrt(n))+1
。只需将 math.sqrt(n)
转换为 int,然后加 1。 math.sqrt 的原因是 n 只能有其平方根(以及它本身)之前的因子。如果 int()
使其小于之前的值,则 +1 用于将范围保持在界限内。
for i in range(2,int(math.sqrt(n))+1):
if n%i==0:
return False
在循环中,我检查 i(循环计数器)是否能被 n 整除。如果是,则意味着 n 有一个因子不是 1(它从 2 开始)或它本身(它以自身的平方根结束,并且 1 也不例外,因为这是用 if n<2 condition). At that point, it returns False.
修复的如果 n 通过了所有这些检查,则它是质数。
这是我的代码:
a=int(input("Enter a number: "))
i=2
p=[]
while i<=a-1:
p.append(a%i)
i=i+1
if 0 not in list(p):
print(a, "is a prime")
else:
print(a, "is not a prime")