欧拉定理常用性质

欧拉函数定义:设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^bp^(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];
    }
}

posted @ 2017-08-17 22:16  会飞的雅蠛蝶  阅读(346)  评论(0编辑  收藏  举报