我正在尝试编写一个处理素数的程序。
素数是只能被自身和 1 整除的数。例如,数字 5 是素数,因为它只能被 1 和 5 整除。但是数字 6 不是素数,因为它可以被除以 1、2、3 和 6。
我的任务包括:
named is_prime()
,它接受一个整数作为参数,如果参数是素数则返回 true,否则返回 false。def main():
#decribe the program
print ("This is a program to see if a number is prime")
#ask the user for a number
number = int (input ("Enter a number to see if it prime: "))
#see if the number is prime
result = is_prime (number)
print ("The number", number, "is", result)
def is_prime(number):
while number < 0:
print ("The number must be greater than 1")
number = int (input("Enter a valid number: "))
for x in range (1, number + 1):
if (number % x) == 0:
return False
else:
return True
main()
在我的 for 语句中,我遗漏了一些东西,并且很难弄清楚我做错了什么。我错过了什么步骤?
is_prime(number)
内检查的数字范围不能包括数字(1, number)
,因为任何数字都可以被它们整除。此外,如果没有找到除数,则只能在 True
的末尾返回 for-loop
:
def is_prime(number):
...
for x in range (2, number):
if (number % x) == 0:
return False
return True
为了获得最佳的执行速度,可以证明你只需要检查数字直到
sqrt(number)
:
from math import sqrt, ceil
def is_prime(number):
...
for x in range(2, min(number,1+ceil(sqrt(number)))):
if (number % x) == 0:
return False
return True
尝试使用此代码来实现该功能
is_prime()
:
def is_prime(number):
while number < 1:
print ("The number must be greater than 1")
number = int (input("Enter a valid number: "))
for x in range (2, number):
if (number % x) == 0:
return False
return True
对我的更正的评论:
1
和 number
所以 range(2, number)
而不是 range (1, number + 1)
while number < 1:
比while number < 0:
return True
,因为如果循环 for
到达末尾,则意味着 number
不能被区间 [2,number) 中的任何 x 值整除。 )
括号表示 x 必须停在 number-1