我对以下代码的目标是
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
我认为逻辑很好,但不确定为什么我没有得到任何输出。
答案 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处停止时结束循环。