2016-08-13 43 views
-4

下面的代码不断显示素数的“不是素数”,对于非素数的数字,“素数不变”。我究竟做错了什么?确定数字是否为素数

quuN = int(input("ENTER NUMBER : ")) 

quuM = 2 

if (quuN <= 0) : 

    print("ENTER NON-NEGATIVE NUMBER PLEASE") 


elif (quuN % quuM == 0) : 

    print(" IS PRIME ") 

else : 

    print("IS NOT PRIME ") 
+1

为什么你认为这个代码将准确确定一个数字是否是总理? – michaelrccurtis

+0

@michaelrccurtis以及我试图在if语句中表示主要条件。所以如果_quuN_的mod被0除以_quuM_,那么它就不是素数,因为素数可以被1和它自己整除。 –

回答

0

的逻辑是不正确

素数(或素数)大于1,其具有比图1和本身之外,没有其他正除数的自然数。大于1的不是质数的自然数称为合数。

简单的Python代码下面

def is_prime(n): 
    for i in range(3, n): 
     if n % i == 0: 
      return False 
    return True 
+1

s_prime(4)将显示为True,但4不是素数。 for循环应该从2开始。 – warun26

0

上述代码被检查,如果一个数是偶数还是奇数。如果输入质数,例如17,则代码检查17是否小于或等于0.然后,它检查哪些评估值为1,而不是0.因此,执行else块,其打印不是PRIME

如果您输入一个偶数,它会打印是PRIME。

此代码检查素数。

def is_prime(n): 
    import math 
    for i in range(2, int(math.sqrt(n))+1): 
     if n % i == 0: 
      return False 
    return True 
+0

为什么我需要嵌套if循环的for循环,如果我只需要知道输入的一个数是否为素数。 –

+0

素数(或素数)是大于1的自然数,除1和自身以外没有正数除数。 for循环遍历从2到自然数,直到n的平方根*检查*如果这些数字中的任何一个实际上除以n。检查[this](http://stackoverflow.com/questions/5811151/why-do-we-check-upto-the-square-root-of-a-prime-number-to-determine-if-it-is -pri)为什么我们使用平方根。 * if *条件有助于此检查。 %操作检查n和i的除法提醒是否为0.如果它是0,那么我除n和n不是素数。 – warun26

0

我假设你使用Python初学者,所以让我指出来检查数的素性在你的代码逻辑是不正确的,你应该先仔细的primes numbers定义阅读,当你这样做,试着去了解这个小例子说明了如何检查素数:

import math 

def is_prime_naive(number): 
    if number == 2: 
     return True 
    if number % 2 == 0: 
     return False 

    i = 3 
    sqrt_number = math.sqrt(number) 

    while i <= sqrt_number: 
     if number % i == 0: 
      return False 
     i = i+2 

    return True 

for i in range(2,101): 
    print "{0} {1} prime".format(i,"is" if is_prime_naive(i) else "is not") 

现在,请注意上面的代码是最简单的一个,但也是最慢的办法来检查一个数是否是质不是。当你熟悉素数的概念,那么你应该检查最快的方法来检查素数,一些例子可能是费马和米勒拉宾素数测试。所以,与黄金运气,你一定会与他们乐趣;-)