51Nod-1136-欧拉函数

来源:互联网 发布:印度经济增长率知乎 编辑:程序博客网 时间:2024/05/21 09:20

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

0 0
原创粉丝点击