对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。
求一个数的欧拉:
int phi(int n)
{
int i,rea=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
rea=rea-rea/i;
while(n%i==0)n/=i;
}
}
if(n>1)
rea=rea-rea/n;
return rea;
}
求N个数组成的数组的欧拉:
int p[N];
int phi()
{
int i,j;
for(i=1;i<N;i++)p[i]=i;
for(i=2;i<N;i+=2)p[i]>>=1;
for(i=3;i<N;i+=2)
{
if(p[i]==i)
{
for(j=i;j<N;j+=i)
{
p[j]=p[j]-p[j]/i;
}
}
}
}
快速幂(a^b)%m
long long quickmod(long long a, long long b, long long m)
{
long long ans=1;
while(b)
{
if(b&1)
{
ans=(ans*a)%m;
b--;
}
b/=2;
a=a*a%m;
}
return ans;
}