Python - Prime检查和增量

时间:2017-01-15 17:41:45

标签: python

我对以下代码的目标是

  1. 检查输入的号码是否为素数
  2. 如果不打印下一个最大的素数
  3. def primetest (num):     
        for c in range (2, num):      
         if num % c == 0:  
          repeattest (num)         #not prime? increment number
         else :  
          print (num,"is a prime number")  
          break         
    
    def repeattest (num):     # check prime if not increment number by 1        
     for z in range (2, num):  
       num = num+1  
       primetest (num)    
       if num % z == 0:  
          num = num+1  
       else:  
          print ("Next Prime:", num+1)  
          break  
    
    num = int (input ("enter a number:"))       # main code: 
    for y in range (2, num):   
      if num % y == 0:  
            repeattest (num)  
      else:  
          print (num,"is a prime number")  
          break  
    

    我认为逻辑很好,但不确定为什么我没有得到任何输出。

2 个答案:

答案 0 :(得分:1)

当您找到一个素数是否为素数时,您的代码的时间复杂度为O(N)。 没有指向从2除以len(num)-1。从给定数字的2到sqrt循环就足够了。因此,时间复杂度降低到O(n)到O(log(n))。

import math
num = int (input ("enter a number:"))

def primeTest(num):
    isPrime = 0
    for i in range(2,int(math.sqrt(num)+1)):
        if num%i == 0:
            isPrime  = isPrime + 1
            break
    if isPrime == 0:
        print(num, "is a prime number")
    else:
        num = num + 1
        repeatTest(num)

def repeatTest (num):
    isPrime = 0
    for i in range(2,int(math.sqrt(num))):
        if num%i == 0:
            isPrime  = isPrime + 1
            break
    if isPrime == 0:
        print("Next Prime: ", num)
    else:
        num = num + 1
        repeatTest(num)

primeTest(num)

答案 1 :(得分:0)

用于查找数字是否为素数的逻辑似乎是错误的。

取9个整数的整数" 9是素数" 。

而且你正在检查从2到Num的下一个素数。 Num是输入,你不能得到比这更大的数字。 它从循环中退出,甚至没有进入,因此在搜索下一个素数时不会打印任何内容。

您需要更改逻辑。

写一个单独的函数来检查素数并在找到下一个素数而不是在num处停止时结束循环。