检查数字是否为素数的程序

时间:2016-10-24 03:41:24

标签: python primes primality-test

您好我已创建此程序以检查数字是否为素数。它有效,但出于某种原因说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

5 个答案:

答案 0 :(得分:6)

跟踪它。 x2开头,然后测试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!'