您的位置:首页 > 其它

51Nod-1136-欧拉函数

2016-07-26 13:32 225 查看
ACM模版

描述

对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler’s totient function、φ函数、欧拉商数等。例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质。

Input

输入一个数N。(2 <= N <= 10^9)

Output

输出Phi(n)。

Input示例

8

Output示例

4

题解

因为2 <= N <= 10^9,所以需要用到公式直接单独求解。

代码

#include <iostream>
#include <cmath>

using namespace std;

long long euler(long long x)
{
long long i, res = x;
for (i = 2; i < (int)sqrt(x * 1.0) + 1; i++)
{
if (!(x % i))
{
res = res / i * (i - 1);
while (!(x % i))
{
x /= i;     //  保证i一定是素数
}
}
}
if (x > 1)
{
res = res / x * (x - 1);
}
return res;
}

int main(int argc, const char * argv[])
{
long long N;
while (cin >> N)
{
cout << euler(N) << '\n';
}
return 0;
}


参考

欧拉函数PHI
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  欧拉函数