SGU 102 - Coprimes(简单)

来源:互联网 发布:旁白配音软件 编辑:程序博客网 时间:2024/04/29 16:15

题意:

求小于n的所有的可以与n互质的数字的个数。

思路

先判断n是否是质数,如果是的话,那么1.....n-1的所有的数都是和n互质的。如果不是质数的话,则用函数gcd求出即可。

代码如下:

#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define M 10005bool prime[M];void is_prime(){    int m = sqrt(M+0.5);    for(int i = 2; i <= m; ++i)        if(prime[i]==0)            for(int j = i*i; j < M; j+=i)                prime[j] = 1;}int gcd(int a, int b){    return b==0?a:gcd(b,a%b);}int main (){    int n;    scanf("%d",&n);    is_prime();    if(prime[n]==0) { printf("%d\n",n-1); return 0; }    int ans = 0;    for(int i = 1; i < n; ++i)        if(gcd(n,i)==1) ++ans;    printf("%d\n",ans);    return 0;}