Coprimes
时间限制:
500
ms | 内存限制:
4096
KB
难度:
1
-
描述
-
For given integer N (1
<=N
<=10
4) 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 file contains integer N.( 注意:程序以文件结束符“EOF”结束输入。) 输出
- Write answer in output file. 每个数字占一行。 样例输入
-
9
样例输出
-
6
思路:题目比较简单,就是求n以内与n的最大公约数为1的数的个数。
#include <stdio.h>
int gcd(int m, int n)
{
int r = n;
while (r != 0)
{
r = m % n;
m = n;
n = r;
}
return m;
}
int main()
{
int i,n;
while (scanf("%d",&n) != EOF)
{
int total = 0;
for (i=1; i<n; i++)
{
if (gcd(i,n) == 1)
{
total++;
}
}
printf("%d\n",total);
}
return 0;
}
如果一个质数p整除n,那么当前就有(1-1/p)个数与它的最大公约数不被p整除,累乘即可得出结果。
#include <stdio.h>
int main(void)
{
int i,n,total;
while (scanf("%d", &n) != EOF)
{
total = n;
for (i=2; i<=n; i++)
{
if (n % i == 0)
{
total = total / i * (i-1);
}
while (n % i == 0)
{
n /= i;
}
}
printf("%d\n",total);
}
return 0;
}