首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python优化Miller-Rabin素数检验

用Python优化Miller-Rabin素数检验
EN

Code Review用户
提问于 2018-03-05 00:32:56
回答 1查看 629关注 0票数 4

我在用Python写一个Miller-Rabin原始性测试。当我简要地观察了其他人是如何处理这个问题的时候,我决定自己尝试解决这个问题。除了我选择的语言之外,我如何优化这段代码呢?任何建议都是受欢迎的,不要犹豫,要残忍地诚实。

代码语言:javascript
复制
def miller_rabin_primality_test(n):

    def mr_check_one(n):
        m = n - 1       
        n = n - 1       
        k =  1          

        while n % 2**k == 0:
            m = n / 2**k      
            k = k + 1         

        return(m)        

    def mr_check_two(n, m, a = [2, 3]):

        for i in range(0, len(a)):
            a = a[i]
            b = pow(a, m, n)
            i = 0

            if(b == n - 1 or b == 1):
                return True

            while(b != n - 1 and i < 7):
                b = pow(b, 2, n)
                i = i + 1

            if(b != n - 1): 
                return False
            else: 
                return True


    m =  mr_check_one(n) 
    r = mr_check_two(n, m)

    return(r)
EN

回答 1

Code Review用户

发布于 2018-03-06 03:12:02

一个明显的变化是,mr_check_one(n)所做的循环比必要的要昂贵得多。这里有一个更简单、更快的版本。

代码语言:javascript
复制
def mr_check_one(n):
    m = n - 1

    n = n - 1
    k =  1          
    while n % 2 == 0:  
        k += 1
        n /= 2

    return(m / 2**k) 

另外,你的第二个功能似乎真的坏了。据称,您在a上循环,但在您第一次通过您重新定义a,重置i和返回之前,循环不止一次。

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

https://codereview.stackexchange.com/questions/188829

复制
相关文章

相似问题

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