数论模板
数论模板
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;
}
}
}