HDU1787 GCD Again【欧拉函数】

题目链接:

?pid=1787

题目大意:

给你一个整数N,求范围小于N中的整数中,与N的最大公约数大于1的整数的个数。

思路:

典型的欧拉函数变形。欧拉函数φ(N)是用来求小于N的整数中,与N的最大公约数为1的数的个数。

那么此题的答案ans = N – φ(N) – 1。

AC代码:

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;int Euler(int n){int ret = n;for(int i = 2; i*i <= n; ++i){if(n % i == 0){n /= i;ret = ret – ret/i;}while(n % i == 0)n /= i;}if(n > 1)ret = ret – ret/n;return ret;}int main(){int n;while(~scanf("%d",&n) && n){printf("%d\n",n-Euler(n)-1);}return 0;}

,不能接受失败,也意味太想去成功了,从心理学上解释,

HDU1787 GCD Again【欧拉函数】

相关文章:

你感兴趣的文章:

标签云: