欧拉 phi 函数代码

今天看算法导论 ,看到欧拉 phi 函数,发现可以对之前写过的代码进行优化,所以重写了一次代码。

欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 。


//  欧拉函数的求法:求出 n 的质因子 p1, p2, ... ,则 
//  EulerPHI (n) = n * (1 - 1 / p1) * (1 - 1 / p2) * ...

#include 
<iostream>
#include 
<cmath>
using namespace std;

int EulerPHI (int n)
{
    
if (n == 1)
        
{
        
return 1;
        }

    
int i = 2, m = n, root = int (sqrt (double (m)));
    
while (i <= root)
        
{
        
if (m % i == 0)
            
{
            n 
-= (n / i);
            
do    {
                m 
/= i;
                }
 while (m % i == 0);
            root 
= int (sqrt (double (m)));
            }

        i 
++;
        }

    
if (m != 1)
        
{
        n 
-= (n / m);
        }

    
return n;
}


void main ()
{
    
int n;
    cin 
>> n;    
    cout 
<< EulerPHI (n) << endl;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值