-1

你好我已经创建了这个程序来检查一个数字是否是一个素数。它有效,但由于某种原因说 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
4

5 回答 5

6

追踪它。x从 开始2,然后是测试999 % 2;它是1,所以else被执行,“素数!” 被打印出来,循环被打破。程序结束。

相反,您需要打印“素数!” 仅当您测试了x. 最简单的方法是取消缩进else:(并在那里删除break):

for x in prime_range:

    if nnumber % x == 0:
        print 'Not a Prime Number!'
        break

else:
    print 'Prime Number!'

Python在没有被破坏else的情况下执行for何时for完成:正是你想要的。

于 2016-10-24T03:48:48.940 回答
1

如果一个数是素数,这意味着除了 1 和它本身之外,没有其他数可以将它整除。这意味着你需要检查它下面的每个数字,然后才能说这个数字是素数。

在您的代码中,您将在第一次迭代时退出循环——无论数字有多大。

于 2016-10-24T03:47:31.190 回答
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!'
于 2016-10-24T03:55:59.230 回答
0

判断有问题,只能是1或者素数能被自己整除。你判断的是只有2出的整体不是素数,你应该用双循环来做条件判断

于 2016-10-24T03:50:34.830 回答
0

您只检查第一次迭代。不管它是否是素数,它都会退出循环,因为部分之一,即“if”或“else”将执行导致循环中断。逻辑是检查从 2 到 (number/2) 的整个数字范围,如果它在某个点将数字除以它就不是素数。如果循环在遍历整个循环后退出,则它是质数。希望你现在能够做到。谢谢!。

于 2016-10-24T03:51:57.510 回答