【欧拉降幂公式】【欧拉函数】

一、降幂公式

A K ≡ A K % ϕ ( m ) + ϕ ( m ) ( m o d    m ) A^K \equiv A^{K\%\phi(m) + \phi(m)} (\mod m) AKAK%ϕ(m)+ϕ(m)(modm)

其 中 φ ( 即 p h i ) 是 欧 拉 函 数 其中φ(即phi)是欧拉函数 φ(phi)

二、欧拉函数

  1. 定义:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作 φ ( n ) φ(n) φ(n)
  2. 性质:
    1、 φ ( 1 ) = 1 φ(1)=1 φ(1)=1
    2、 φ ( p ) = p − 1 φ(p) = p - 1 φ(p)=p1 (对于质数p)
    3、欧拉定理:对于互质的正整数a和n,有 a φ ( n ) ≡ 1 m o d n a^{φ(n)} \equiv 1 mod n aφ(n)1modn
    4、欧拉函数是积性函数:若m,n互质,φ(mn)=φ(m)φ(n)(积性函数表达式)。
    5、n是质数p的k次幂,有 φ ( n ) = p k − p ( k − 1 ) = ( p − 1 ) p ( k − 1 ) φ(n)=p^k-p^{(k-1)}=(p-1)p^{(k-1)} φ(n)=pkp(k1)=(p1)p(k1),因为除了p的倍数外,其他数都跟n互质。
    6、设p为n的质因数
    若(n % p == 0 && (n / p) % p == 0) 则有φ(n)=φ(n / p) * p;
    若(n % p == 0 && (p / p) % p != 0) 则有:φ(n) = φ(n / p) * (p - 1)。

三、模板

欧拉函数
法一:

long long euler(long long x)  //直接求欧拉函数
{
    long long res=1;
    for(long long i=2;i*i<=x;++i){
        if(x%i==0){
            x/=i;
            res*=(i-1);
            while(x%i==0){
                x/=i;
                res*=i;
            }
        }
    }
    if(x>1) res*=(x-1);
    return res;
}

法二:

//求欧拉函数 相当于不断减去
long long phi(long long x)
{
    long long res=x;
    for(long long i=2;i*i<=x;++i){
        if(x%i==0){
            res=res-res/i;
            while(x%i==0)
                x/=i;
        }
    }
    if(x>1)
        res=res-res/x;
    return res;
}

快速幂

long long qpow(long long a,long long n,long long mod)     //快速幂
{
    long long ans=1;
    while(n){
        if(n&1){
            ans*=a;
            ans%=mod;
        }
        a=(a*a)%mod;
        n>>=1; 
    }
    return ans;
}

你可能感兴趣的:(数论,-,欧拉函数,欧拉降幂,快速幂)