我对如何计算时间复杂度有一个基本的了解,但由于素数的随机性,我不确定在这种情况下如何计算它。
简单解释一下-->本质上,我一直在统计剩余数,这样我就能知道下一个素数是什么时候。
我的代码:
import math
n = int(input("Enter the number:\t"))
primeList = []
checkList = []
number = 3
isPrime = True
while number <= math.sqrt(n) and isPrime:
isChanged = False
for i, checkNum in enumerate(checkList):
if checkNum == 1:
isChanged = True
checkList[i] = primeList[i]
else:
checkList[i] = checkNum - 1
if not isChanged:
primeList.append(number)
checkList.append(number)
if n % number == 0:
isPrime = False
number += 2
if isPrime:
print("Prime")
else:
print("Not Prime")发布于 2018-08-01 20:03:00
你的算法似乎是O(n/log(n))
存在通过外部循环的sqrt(n)通道。内部循环受小于sqrt(n)的素数的限制。这是由sqrt(n)/log(sqrt(n))渐近给出的Prime Number Theorem。根据对数定律,这等同于sqrt(n)/(0.5*log(n)) = 2*sqrt(n)/log(n)。因此,总体复杂性为
O(sqrt(n)*2*sqrt(n)/log(n)) = O(2*n/log(n)) = O(n/log(n))不用说,这不是检查n是否是质数的非常有效的方法。对于所有小于n的数字的整除性,它比O(n)的朴素检查好不了多少。
https://stackoverflow.com/questions/51632183
复制相似问题