欧拉定理常用性质
欧拉函数定义:设n 为正整数,则1,2......,n中与n互质的整数个数记作f(n)。
1.1 若n为素数,f(n)=n-1;
1.2 整数n=p*q,p,q为不同素数,则f(n)=f(p)*f(q)=(p-1)*(q-1)
1.3 n=p^a*q^b,f(n)=f(p^a)*f(q^b)=n*(1-1/p)*(1-1/q)
1.4 分解质因子相乘,f(n)=n*(1-1/p1)*(1-1/p2)*.......*(1-1/pk).
f(100)=f(2^2*5^2)=100*1/2*4/5=40;
1.5 (m,n)=d;
f(m*n)=f(m)*f(n)*d/f(d)
2.当gcd(a,b)==1时,a^φ(b)≡1(mod b);
3.p^b≡p^(b%ϕ(m)+ϕ(m)) mod m
附欧拉打表:
for(i=1; i<=maxn; i++)
p[i]=i;
for(i=2; i<=maxn; i+=2)
p[i]/=2;
for(i=3; i<=maxn; i+=2)
if(p[i]==i)
{
for(j=i; j<=maxn; j+=i)
p[j]=p[j]/i*(i-1);
}
LL p(int n){ //返回euler(n)
LL res=n,a=n;
for(LL i=2;i*i<=a;i++)
{if(a%i==0){
res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
const int MAXN = 3e6+5;
__int64 f[MAXN];
void SumPhiTable(int n)
{
f[1] = 1;
for(int i=2; i<n; ++i)
{
if(!f[i])
{
for(int j=i; j<n; j+=i)
{
if(!f[j]) f[j] = j;
f[j] = f[j]/i * (i-1);
}
}
f[i] += f[i-1];
}
}