码迷,mamicode.com
首页 > 其他好文 > 详细

数论模板

时间:2020-06-13 23:38:02      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:dex   str   false   快速幂取模   div   nbsp   odex   while   style   

数论:

快速乘:

ll ModMul(ll a,ll b,ll n){//快速积取模 a*b%n
    ll ans=0;
    while(b){
        if(b&1)
        ans=(ans+a)%n;
        a=(a+a)%n;
        b>>=1;
    }
    return ans;
}

 

快速幂:

ll ModExp(ll a,ll b,ll n){  //快速幂取模 a^b%n
    ll ans=1;
    while(b){
        if(b&1)
        ans=ModMul(ans,a,n);
        a=ModMul(a,a,n);
        b>>=1;
    }
    return ans;
}

 

Miller-Rabin素数检测算法:

bool miller_rabin(ll n){
    ll i,j,a,x,y,t,u,s=10;
    if(n==2)
        return true;
    if(n<2||!(n&1))
        return false;
    for(t=0,u=n-1;!(u&1);t++,u>>=1); //n-1=u*2^t
    for(i=0;i<s;i++){
        a=rand()%(n-1)+1;
        x=ModExp(a,u,n);
        for(j=0;j<t;j++){
            y=ModMul(x,x,n);
            if(y==1&&x!=1&&x!=n-1)
                return false;
            x=y;
        }
        if(x!=1)
            return false;
    }
    return true;
}

素数筛(线性筛):

 

数论模板

标签:dex   str   false   快速幂取模   div   nbsp   odex   while   style   

原文地址:https://www.cnblogs.com/Vikyanite/p/13121902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!