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
Input file contains integer N.
Output
Write answer in output file.
Sample Input
9
Sample Output
6
题意:计算小于n。并且与n互质的数
欧拉函数问题(详情参见http://blog.csdn.net/qq_21120027/article/details/47863587)
#include<iostream>
#include <cstdio>
#include <vector>
#include <string.h>
#include <math.h>
#define N 10010
using namespace std;
vector<int> prime;
int flag[N];
void PRIME()
{
int i, j;
memset(flag, 1, sizeof(flag));
flag[1] = 0;
flag[2] = 1;
for (i = 3; i < N; i++)
{
for (j = 2; flag[i] && j * i< N; j++)
{
flag[j*i] = 0;
}
}
/*for (i = 1; i < N; i++)
{
if (flag[i])
{
prime.push_back(i);
}
}*/
}
int gcd(int a, int b)
{
if (b == 0)
{
return a;
}
return gcd(b, a%b);
}
int main()
{
#ifndef ONLINE_JUDGE
//freopen("1.txt", "r", stdin);
#endif
PRIME();
int n, ans, i;
while(~scanf("%d", &n))
{
if (n == 1)
{
cout << "1\n";
continue;
}
if (flag[n])
{
cout << n-1 << endl;
continue;
}
ans = 0;
for (i = 1; i < n; i++)
{
if (gcd(n, i) == 1)
{
ans++;
}
}
cout << ans << endl;
}
return 0;
}