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;
}
浙公网安备 33010602011771号