• miller rabin 素性测试


    知识前置:

    a^(p-1)≡1(mod p)(费马小定理)(p为素数,且a<p)

    用途:

    检验一个数是否为素数

    实现方法:

    快速幂+随机化

    原理:

    一个素数一定是满足费马小定理的,而一个合数有一定的可能性满足费马小定理,所以可以利用随机化随机a,来测试一个数是否为素数

    优点:

    时间短,有一个判断一个,无需范围

    缺点:

    有一定的可能性会误判

    补充:

    miller rabin不一定只用费马小定理,其他只有素数满足的数学定理也能放进去测试,还能提高准确率

    代码:

    long long pw(long long va,long long k)
    {
        if(k==1)
        {
            return va%p;
        }
        if(k%2==0)
        {
            return pw((va*va)%p,k/2)%p;
        }
        else
        {
            return ((pw((va*va)%p,k/2)%p)*va)%p;
        }
    }
    bool check(int val)
    {
        if(val==1)
        {
            return false;
        }
        if(val==2)
        {
            return true;
        }
        if(val==3)
        {
            return true;
        }
        long long pd=0;
        for(rii=1;i<=10;i++)
        {
            int kkk=rand();
            int ltt=rand();
            p=val;
            kkk=kkk*ltt%97;//取膜和判断次数由题目给的时间而定,测试次数越多,取膜越大,时间耗费越多
            kkk*=2;
            pd=max(pd,pw(kkk,val-1));
        }
        if(pd==1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
  • 相关阅读:
    「系统集成方案」智慧工地
    「Django」学习之路,持续更改
    「Django」与mysql8连接的若干问题
    「Python」socket指南
    「Python」35个知识点
    「CSS」文本编排相关的CSS属性设置
    「CSS」css基础
    bWAPP----HTML Injection
    bWAPP----HTML Injection
    bWAPP----HTML Injection
  • 原文地址:https://www.cnblogs.com/ztz11/p/9254170.html
Copyright © 2020-2023  润新知