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; }