zoukankan      html  css  js  c++  java
  • 米勒罗宾素性检验

    #include <iostream>
    using namespace std ;
    #define rd(x) (rand()%(x))
    typedef unsigned long long ll;
    ll pow_mod(ll a,ll b,ll r){
        ll ans=1,buff=a;
        while(b)
        {
            if(b&1)
                ans=(ans*buff)%r;
            buff=(buff*buff)%r;
            b>>=1;
        }
        return ans;
    }
    bool test(ll n,ll a,ll d){
        if(n==2) return true;
        if(n==a) return false;
        if(!(n&1)) return false;
        while(!(d&1)) d>>=1;
        ll t = pow_mod(a,d,n);
        while(d!=n-1&&t!=n-1&&t!=1){
            t = t*t%n;//下面介绍防止溢出的办法,对应数据量为10^18次方;
            d<<=1;
        }
        return t == n-1||(d&1)==1;//要么t能变成n-1,要么一开始t就等于1
    }
    bool isprime(ll n){
        int a[] = {2,3,5,7,11,13,17};//或者自己生成[2,N-1]以内的随机数rand()%(n-2)+2
        for(int i = 0; i <= 6; ++i){
            if(n==a[i]) return true;
            if(!test(n,a[i],n-1)) return false;
        }
        return true;
    }
    int main(){
        int t,ans=0;
        ll N;
        for(cin >> t;t;t--){
           cin >> N;
           cout << ((isprime(N))?"Yes":"No") <<endl;
        }
    }
    rush!
  • 相关阅读:
    MySQL用户管理
    MySQL函数
    MySQL数据类型
    MySQL配置
    PowerDesigner之PDM检查
    PowerDesigner之PDM(物理概念模型)
    .NET Reflector反编译的方法
    IBatis.net 输出SQL语句(七)
    SVN 记录冲突、忽略
    SQLServer 窗口函数
  • 原文地址:https://www.cnblogs.com/LH2000/p/15225462.html
Copyright © 2011-2022 走看看