SGU 102 - Coprimes(简单)

题意:

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

思路

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

代码如下:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define M 10005
bool 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;
}


posted on 2013-07-30 10:38  Primo...  阅读(135)  评论(0编辑  收藏  举报