计算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;
}
京公网安备 11010502036488号