欧拉函数,欧拉公式,降幂公式

欧拉函数

欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。(例如φ(8)=4,因为1,3,5,7均和8互质。)
通式:
其中p1, p2……pn为x的所有质因数,x是不为0的整数。在这里插入图片描述
其中p1, p2……pn为x的所有质因数,x是不为0的整数。
质因数:质因数(素因数或质因子)在数论里是指能整除给定正整数的质数。

int ouler(int n)
{
    int number = 1, i;
    for(i=2; i*i <= n; i++)
    {
        if(n%i == 0)
        {
            n =n/ i;
            number *= (i-1);
            while(n%i == 0)
            {
                n /= i;
                number *= i;
            }
        }
    }
    if(n > 1)
        number *= (n-1);
    return number;
}

欧拉定理

若n,a为正整数,且n,a互质,则:
这里是引用

降幂

a b ≡ { a b % φ ( n ) (   m o d     n )                    n , a 互 质 a b (   m o d     n )                          b < φ ( n ) a b % φ ( n ) + φ ( n ) (   m o d     n )          b ≥ φ ( n ) a^b\equiv \left\{ \begin{aligned} a^{b\%\varphi(n)}(\bmod\ n)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ n,a互质\\ a^b (\bmod\ n)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ b<\varphi(n)\\ a^{b\%\varphi(n)+\varphi(n)}(\bmod\ n)\ \ \ \ \ \ \ \ b\geq\varphi(n) \end{aligned} \right. abab%φ(n)(mod n)                  n,aab(mod n)                        b<φ(n)ab%φ(n)+φ(n)(mod n)        bφ(n)

#include 
#include 
int main()
{
    long long int a,p;
    long long int b=0;
    char s[100];
    printf("底数 指数 模数\n");
    scanf("%lld %s %lld",&a,s,&p);
    int phi=ouler(p),len=strlen(s);
    printf("phi(%lld)=%d\n",p,phi);
    for(int i=0; i1)
        result=result*(n-1)/n;
    return result;
}

你可能感兴趣的:(算法,算法)