题解:SP10232 AMR11E - Distinct Primes
思路
这道题有
为了防止这种情况我们可以先预处理一下找出每一个有三个质因子的数。
众所周知当目前数是质数时,只要是质数倍的数那么就一定包含当前的这个质因子,那么我们就可以把那个数的质数因子加1。
那么查找质因子这个任务就交给我们的埃氏筛来实现吧。
这个时候我们只要判断这个数的质因子数是否有三个如果有放入数组之中。
查找完之后我们还要排序一下因为题目要的是第
然后我们直接输出
代码
#include<bits/stdc++.h>
using namespace std;
int T,cnt;
int a[3005];
int vis[3005];
void work(){
for(int i = 2 ; i <= 3000 ; i ++){
if(vis[i] != 0)continue;
for(int j = 1 ; j <= 3000 / i ; j ++){
int pos = i * j;
vis[pos] ++;
if(vis[pos] == 3){
a[++cnt] = pos;
}
}
}
}
int main(){
work();
cin >> T;
sort(a + 1 , a + 1 + cnt);
while(T --){
int n;
cin >> n;
cout << a[n] << endl;
}
return 0;
}