NYOJ 479 Coprimes

来源:互联网 发布:linux教程 唐凯 编辑:程序博客网 时间:2024/05/18 06:23

Coprimes

时间限制:500 ms  |  内存限制:4096 KB
难度:1
描述
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 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;}  


 

0 0
原创粉丝点击