欧拉函数、费马定理、欧拉定理

一、欧拉函数

思考:任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?

解:计算这个值的方法就叫做欧拉函数,以φ(n)表示。


怎样求一个任意数的欧拉函数值?


欧拉函数、费马定理、欧拉定理_第1张图片

其中(3)为欧拉函数的通用计算形式。

实现代码:

long phi(long n)
{
    long ans=n;
    for (long i=2; i*i<=n; i++) //寻找素数pi(任意一个正整数可以分解成唯一的质因数的乘积,所以从小到大的找,则符合条件的一定是素数)
    {
        if(n%i==0) //n能被i整除
        {
            n/=i;
            ans=ans-ans/i;//ans=ans*(1-1/i)
            while (n%i==0) //找出素数pi对应的指数是多少
            {
                n/=i;
            }
        }
    }
    if(n>1)
    {
        ans=ans-ans/n;
    }
    return ans;
}

可以用 poj2407来测试代码。


二、费马定理

如果p是素数并且a是不能被p整除的正整数,那么:


费马定理的另一种形式:

 如果p是素数,a任意正整数,则对gcd(a,p)=1,有:



证明:

因为p是素数,所以a、p互素,所以集合{a,2a,3a,…,(p-1)a}在同余意义下等价于{1,2,3,…,(p-1)}(注:元素顺序可能不同)
所以a×2a×3a×…×(p-1)a≡1×2×3×…×(p-1) mod p,即(p-1)!a^(p-1)≡(p-1)!mod p,所以a^(p-1)≡1mod p,也即ap≡a mod p。

来看道例题:

欧拉函数、费马定理、欧拉定理_第2张图片


三、欧拉定理

若整数a与整数n互素,则:


类似费马定理,欧拉定理的另一种表述也很有用( a和n不一定互素):


如果n=p是素数,则有


显然,欧拉定理可以看成是费马定理的推广形式。


下面来看看一道例题:

欧拉函数、费马定理、欧拉定理_第3张图片





你可能感兴趣的:(【编程之美】,数据结构与算法,欧拉定理,费马定理,欧拉函数,数论)