欧拉
欧拉函数:phi(x):在1~x中与x互质的数的个数
求法:
欧拉筛:
b[1]=1;
for(int i=2;i<=n;i++)
{
if(!b[i]) v[++k]=i,phi[i]=i-1;//质数的phi等于他减一
for(int j=1;j<=k;j++)
{
if(i*v[j]>n) break;
b[i*v[j]]=1;
if(i%v[j]==0)
{
phi[i*v[j]]=phi[i]*v[j];//i%p==0,phi(i*p)=phi(i)*p
break;
}
else phi[i*v[j]]=phi[i]*phi[v[j]];//i%p!=0,phi(i*p)=phi(i)*phi(p)
}
}
单个求(n^1/2)
for(int i=2;i*i<=m;i++)
{
if(m%i==0)
{
phi=phi/i*(i-1);
while(m%i==0) m/=i;
}
}
//phi(x)=∏(x%pi==0)(pi-1)/pi
欧拉定理:
x与p互质:x^phi(p)≡1(%p)
感性证明:
令ai为所有<p与p互质的数
设pi=ai*x
引理1:
i!=j->pi≠pj (%p) (因为ai两两不同)
引理2:
gcd(pi%p,p)=1 (x,ai均与p互质)
所以,pi%p只有phi种取值
总证明:
因为pi%p只有phi种不同取值,而pi%p两两不同,且与p互质
所以,一个pi%p对应一个ai
所以∏pi≡∏ai(%p)
x^phi(p)*∏ai≡∏ai(%p0
x^phi(p)≡1(%p)
扩展欧拉:
当b>phi(p)时:
a^b≡a^(b%phi(p)+phi(p)) (%p)