UVALive 5987 Distinct Primes (预处理 水题)
题目
题意
Lucky Number定义为至少包含三个不同素因子的正整数,30是第一个,42是第二个,求第n个Lucky Number (n <= 1000)
解法
筛素数,打表,输出
代码
#include <cstdio>
#include <cstring>
const int N = 1100;
bool isprime[N];
int prime[N];
int tot;
int ans[N];
void getprime() {
memset(isprime, true, sizeof(isprime));
for(int i = 2; i < N; i++) {
if(isprime[i]) {
tot++;
prime[tot] = i;
if(tot >= 100)
break;
}
for(int j = 1; ((j <= tot) && (i * prime[j] < N)); j++) {
isprime[i * prime[j]] = false;
if(i % prime[j] == 0)
break;
}
}
}
void getans() {
getprime();
int cont = 1;
int _max = 0;
for(int i = 1; i < 3000; i++) {
int cnt = 0;
for(int j = 1; j <= tot; j++) {
if(i % prime[j] == 0) {
cnt ++;
if(cnt == 3) {
ans[cont++] = i;
break;
}
}
}
}
}
int main() {
getans();
int T, n;
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
printf("%d\n", ans[n]);
}
return 0;
}
来源
Regionals 2011 Asia - Amritapuri