Question:
For given integer N (1<=N<=104) find amount of positive numbers not greater than N that coprime with N. Let us call two positive integers (say, A and B, for example) coprime if (and only if) their greatest common divisor is 1. (i.e. A and B are coprime iff gcd(A,B) = 1).
Input
Input file contains integer N.
Output
Write answer in output file.
Sample Input
9
Sample Output
6
代码
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
int n, count = 1;
cin >> n;
for (int i = 2; i < n; i ++)
{
int a = n, b = i, r;
while (1) //欧几里德算法(辗转相除法)求最大公约数
{
r = a % b;
if (r == 0)
{
if (b == 1) count ++;
break;
}
a = b;
b = r;
}
}
cout << count << endl;
return EXIT_SUCCESS;
}
Mark:
1.这里使用了欧几里德算法来求最大公约数;用欧拉函数直接求结果,可能会更快。
2.开始时,把count初值设为0,然后从1开始判断,这样使得1的结果为0,不符合题目中的定义;后来把count设置为1,然后从2开始判断,AC了。
原来的方法也可以,但是应该把 i < n 改为 i <= n 。