首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的素性测试的时间复杂度是多少?

我的素性测试的时间复杂度是多少?
EN

Stack Overflow用户
提问于 2018-08-01 19:32:23
回答 1查看 424关注 0票数 2

我对如何计算时间复杂度有一个基本的了解,但由于素数的随机性,我不确定在这种情况下如何计算它。

简单解释一下-->本质上,我一直在统计剩余数,这样我就能知道下一个素数是什么时候。

我的代码:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)。因此,总体复杂性为

代码语言:javascript
复制
O(sqrt(n)*2*sqrt(n)/log(n)) = O(2*n/log(n)) = O(n/log(n))

不用说,这不是检查n是否是质数的非常有效的方法。对于所有小于n的数字的整除性,它比O(n)的朴素检查好不了多少。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51632183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档