我正在练习python。尝试编写一个简单的程序来确定数字是否为质数。在我的代码中,数字2没有显示结果,而数字9表示是质数...啊!我显然在这里缺少一些逻辑...我在做什么错。
num = int(input("number? "))
if num > 1:
for i in range(2, num):
if (num % i)==0:
print(num, "Not Prime")
break
else:
print(num, "Is Prime")
break
else:
print(num, "is never prime")
答案 0 :(得分:0)
您的逻辑在几个地方有些偏离。
1)break
语句的两个分支中都有if
语句,因此您仅测试2的可除性。一旦找到除数,就完成了(您知道数字是复合的),但如果没有,则需要继续检查。
2)num % num
始终等于0。您只需要检查可能的除数,最大为sqrt(num)
。
答案 1 :(得分:0)
您遇到的问题是,您在第一次迭代中就跳出了循环,而没有真正经历从i
到num
的整个范围。您实际上只是在测试是否num % 2 = 0
。
尝试以下方法:
import math
num = int(input("number? "))
if num > 1:
for i in range(2, math.sqrt(num)):
# Run through all the numbers until we encounter a case where
# num is divisible by i or we have gone through all possibilities.
if (num % i)==0:
prime = false
break
else:
prime = true
# Here we print the result.
# This is outside the loop to prevent it from being printed each iteration.
if prime:
print(num, "Is Prime")
else:
print(num, "Is not Prime")
else:
print(num, "is never prime")