• miller_rabin判断质数logn


    写这次博客的原因是在网上看了很多的miller_rabin判断质数,发现代码都很长或者不好理解,这次搞懂了写个简单易懂的方便大家理解。
    首先,根据费马小定理,如果一个数n是质数的话,那么必定存在一个数a,使得a的n-1次方%n必定等于1
    那么,我们就可以用随机化算法,去随机a,然后只要存在a的n-1次方%n不等于1,就返回false
    最后返回true
    代码如下

    #include<bits/stdc++.h>
    #define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
    #define re register int
    #define x first
    #define y second
    typedef long long ll ;
    using namespace std;
    const int N =  1e6 + 10 , M = 1010 , inf = 0x3f3f3f3f , mod = 1e9 + 7 ;
    int mi = 5 ;  //mi是随机a的次数  可以变大它的值使答案更准确
    ll random(ll n)
    {
        return (ll)((double)rand()/RAND_MAX*n + 0.5) ;
        //(double)rand()/RAND_MAX 返回0到1之间随机的一个小数
    }
    ll qpow(ll a , ll b , ll p) // 快速幂
    {
        ll ans = 1 % p ;
        while(b)
        {
            if(b & 1) ans = ans * a % p ;
            b >>= 1 ;
            a = a * a % p ;
        }
        return ans ;
    }
    bool check(ll n) 
    {
        for(int i = 1 ; i <= mi ; i ++)
        {
            ll a = random(n - 2) + 1 ;
            if(qpow(a,n-1,n) != 1)
                return false;
        }
        return true ;
    }
    int main()
    {
    
        ll n ;
        cin >> n ;
        if(check(n))
        {
            puts("YES");
        }
        else puts("NO");
    
        return 0;
    }
    
  • 相关阅读:
    【WebTerminal】gotty工具
    【Java】15分钟快速体验阿里Java诊断工具Arthas
    【K8S】helm chart多环境部署最佳实践-示例
    mysql-linux定时备份mysql数据库
    Mockito-简单使用使用
    EasyMock 简单使用
    SpringDataJpa学习
    js-重写jquery的ajax中的内容
    shiro-过滤器
    hadoop ha 读取 activce状态的活动节点
  • 原文地址:https://www.cnblogs.com/yueshehanjiang/p/14698145.html
Copyright © 2020-2023  润新知