描述
对正整数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;
}