您好我已创建此程序以检查数字是否为素数。它有效,但出于某种原因说999是素数。我的错误在哪里如果有人解释的话会很棒。谢谢!
这是我的计划:
number = raw_input('Enter a Number: ')
nnumber = int(number)
prime_range = range(2, nnumber)
for x in prime_range:
if nnumber % x == 0:
print 'Not a Prime Number!'
break
else:
print 'Prime Number!'
break
答案 0 :(得分:6)
跟踪它。 x
以2
开头,然后测试999 % 2
;它是1
,因此执行else
,"素数!"打印出来,循环被打破了。计划结束。
相反,您需要打印" Prime数字!"只有当您测试x
的所有可能性时。最简单的方法是取消else:
(并在那里删除break
):
for x in prime_range:
if nnumber % x == 0:
print 'Not a Prime Number!'
break
else:
print 'Prime Number!'
当else
完成而没有被破坏时,Python会执行for
的{{1}}:正是你想要的。
答案 1 :(得分:1)
如果一个数字是素数,那意味着除了1和它本身之外没有数字均匀地除以它。这意味着你需要检查它下面的每个数字,然后才能说数字是素数。
在您的代码中,您将在第一次迭代时退出循环 - 无论数字有多大。
答案 2 :(得分:0)
判断有问题,只能是1或素数本身可以被整除。你判断的只有2个,不是素数,你应该用双循环来做判断的条件
答案 3 :(得分:0)
您正在检查第一次迭代。无论它是否是素数,它都是从循环中退出的,因为其中一个部分是“如果'或者'否则'将执行导致循环中断。逻辑是检查从2到(数字/ 2)的整个数字范围,如果它在某个点上除数,它将不是素数。如果循环在迭代整个循环后退出,则它是素数。希望你现在能够做到。谢谢!
答案 4 :(得分:0)
您现有的代码仅在每次测试时,如果您输入的数字可被2整除,然后以任何方式突破循环。你必须检查所有较低的值,只有当它确实发现它不是素数时才退出:
number = raw_input('Enter a Number: ')
nnumber = int(number)
prime_range = range(2, nnumber)
prime = True
for x in prime_range:
if nnumber % x == 0:
prime = False
break
if prime:
print 'Prime Number!'
else:
print 'Not a Prime Number!'