phi(筛):
int prime[MAXN];//保存素数
bool vis[MAXN];//初始化
int phi[MAXN];//欧拉函数
void Prime(int n)
{
int cnt=0;
memset(vis,0,sizeof(vis));
for(int i=2;i<n;i++)
{
if(!vis[i])
{
prime[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;j<cnt&&i*prime[j]<n;j++)
{
__int64 k=i*prime[j];
vis[k]=1;
if(i%prime[j]==0)
{
phi[k]=phi[i]*prime[j];
break;
}
else
phi[k]=phi[i]*(prime[j]-1);
}
}
}
phi(单点):
ll phi(ll x)
{
ll t=x;
for(ll i=2;i<=m;i++)
if(x%i==0)
{
t=t/i*(i-1);
while(x%i==0)x/=i;
}
if(x>1)t=t/x*(x-1);
return t;
}
CRT:
int CRT(int a[],int m[],int n)
{
int M = 1;
int ans = 0;
for(int i=1; i<=n; i++)
M *= m[i];
for(int i=1; i<=n; i++)
{
int x, y;
int Mi = M / m[i];
exgcd(Mi, m[i], x, y);
ans = (ans + Mi * x * a[i]) % M;
}
if(ans < 0) ans += M;
return ans;
}