数论模板

数论模板

1.快速幂

模板

int mypow(int a,int b ,int p)
{
    ll ans=1;
    while(b)
    {
        if(b&1)
            ans=ans*a%p;
        a=(ll)a*a%p;
        b>>=1;
    }
    return ans%p;
}

2.筛法

2.1埃氏筛法

模板

const int maxn=1e6+10;
bool vis[maxn];
int prime[maxn],len=0;
void ES_sieve(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(!vis[i])
        {
            prime[++len]=i;
            for(int j=2;j*i<=n;j++)
                vis[j*i]=1;
        }
    }
}

2.2线性筛法

const int maxn=1e6+10;
bool vis[maxn];
int prime[maxn],len;
void OL_sieve()
{
    len=0;
    for(int i=2;i<=n;i++)
    {
        if(!vis[i]) prime[++len]=i;
        for(int j=1;prime[j]*i<=n;j++)
        {
            vis[prime[j]*i]=1;
            if(i%prime[j]==0) break;
        }
    }
}
posted @ 2021-07-29 08:30  巴扎嘿~  阅读(47)  评论(0编辑  收藏  举报