HDU 1286 - 找新朋友 ( 筛法 )
题意
找1~n-1内有多少个数与n没有大于1的公约数
思路
用筛法暴力就能解
分解出n的所有因子, 扫一遍未被标记的数目就是答案
在时间范围之内
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
typedef long long ll;
using namespace std;
const int maxn = 32770;
int mp[maxn];
int main()
{
int T, n;
scanf("%d",&T);
while(T--)
{
memset(mp, 0, sizeof mp);
scanf("%d",&n);
for( int i = 2; i < n; i++ )
{
if( n % i == 0 )
{
for( int j = 1; i*j < n; j++ )
{
mp[i*j] = 1;
}
}
}
int sum = 0;
for( int i = 1; i < n; i++ )
{
if( !mp[i] )
sum++;
}
printf("%d\n", sum);
}
return 0;
}