您的位置:首页 > 运维架构

SGU 102. Coprimes

2015-05-16 18:50 176 查看
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 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: