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;
}
posted @ 2018-07-24 21:38  JinxiSui  阅读(139)  评论(0编辑  收藏  举报