欧拉函数

参考链接:https://blog.csdn.net/liuzibujian/article/details/81086324

什么是欧拉函数

欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。

如何计算欧数值拉函

欧拉函数的通式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2……pn为n的所有质因数,n是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。

代码实现:

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

晦涩难懂一:代码中的 ans-=ans/i;  这一步就是对应欧拉函数的通式~还是应该比较容易看懂的吧?
晦涩难懂二:while(n%i==0)   n/=i;    这一个语句是为了保证完全消除我们刚才得到的那个i因子。确保我们下一个得到的i是n的素因子。

晦涩难懂三:if(n>1)ans-=ans/n;  这个语句是为了保证我们已经除完了n的所有的素因子,有可能还会出现一个我们未除的因子,如果结尾出现n>1 ,说明我们还剩一个素因子木有除。

欧拉函数值打表:

void euler()  
{  
    for(int i=2;i<maxn;i++){  
        if(!E[i])  
        for(int j=i;j<maxn;j+=i){  
            if(!E[j])E[j]=j;  
            E[j]=E[j]/i*(i-1);  
        }  
    }  
}

 

积性函数


先介绍一下什么是积性函数,后面将会用到。若当m与n互质时,f(m∗n)=f(m)∗f(n),那么f是积性函数。若对任意正整数,都有f(m*n)=f(m)*f(n)成立,则f是完全积性函数。

 

欧拉函数的几个性质


1.对于质数p,φ(p)=p−1
2.若p为质数,n=p^k,则φ(n)=p^k-p^(k-1) 
3.欧拉函数是积性函数,但不是完全积性函数。若m,n互质,则φ(m∗n)=φ(m)∗φ(n) 。特殊的,当m=2,n为奇数时,φ(2*n)=φ(n)。
4.当n>2时,φ(n)是偶数。
5.小于n的数中,与n互质的数的总和为:φ(n) * n / 2 (n>1)。

​    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值