数论模板

Posted vikyanite

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论模板相关的知识,希望对你有一定的参考价值。

数论:

快速乘:

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;
}

素数筛(线性筛):

 

以上是关于数论模板的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段1——vue主模板

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)

数论代码整理

Eclipse 中的通用代码片段或模板