图片说明

计算n范围内的质数, 然后计算n范围内的每个数的因数除质数外还有几个因数, 最后进行统计;

#include<bits/stdc++.h>

using namespace std;

bool b[200000];//用来判断因数是否为质数
int d [600];
int sum[200000];
bool a[200000];
int n, m;
int ans[200000];

void fs(int x){
    for (int i = 1; i <= sqrt(x); i ++){
        if (i == sqrt(x)){
            if(b[i] && x %i == 0) sum [x] ++;
        }
        else{
            if(b[i] && x%i == 0) sum [x] ++;
            if(b[x / i] && x % i == 0) sum [x] ++;
        }
    }
}

int main(){
    cin >> n >> m;

    b[1] = false;
    b[2] = false;
    b[3] = false;

    for (int j = 4; j <= n; j ++)
    for (int i = 2; i <= sqrt(j); i ++) if (j % i == 0){
         b[j] = true;
         break;
    }
    for (int i =1; i <= n; i ++) fs(i), ans[sum[i]] ++;
    while (m --){
        int x;
        cin >> x;
        cout << ans[x] <<endl;
    }
    return 0;
}