八月六日学习笔记

欧拉函数

在别人博客上找来一段模板代码,拿来分析一下

int euler(int n)  
{  
    int res = n;  
    int m = (int)sqrt(n);  
    for(int i = 2; i <= m; i++)//以上两行非常类似求素数  
        if(n % i == 0)  //说明n不是素数
        {  
            res = res / i * (i-1);//这一步不是很懂,  
            while(n % i == 0) n /= i;//直到n不能被i整除为止  
        }  
    if(n > 1) res = res / n * (n-1);  //经过以上的折腾,得到n,直接运算
    return res;  
}

欧拉函数是求小于x并且和x互质的数的个数(所谓两个数互质,那就是两个数的最大公约数是1)

通式:φ(x) = x ( 1 - 1/p1 )( 1 - 1/p2 )( 1 - 1/p3 )( 1 - 1/p4 )…..( 1 - 1/pn )

其中p1, p2……pn为x的所有不重合的质因数,x是不为0的整数(注意,我在这个地方加了一个不重合,比如 12 = 2 * 2 * 3 ,那么它的不重合的质因数就有 2 和 3,所以 φ(12) = x(1 - 1/2)( 1 - 1/3) = 4 ,也就是说 12 在 1~12 中有四个与其互质的数,分别为1、5、7、11,是不是2、3、4、6、8、9、10与12都不互质呢,很神奇吧 (ฅ>ω<*ฅ))

有个小细节是:φ(1)=1(唯一和1互质的数就是1本身)

 看到这,我懂了

扫描二维码关注公众号,回复: 2688999 查看本文章

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/81456552