UVALive 5987 Distinct Primes (预处理 水题)

题目

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

赛后总结

2015暑假训练赛个人赛(8.19)

posted @ 2015-08-25 16:20  ACM_Record  阅读(144)  评论(0编辑  收藏  举报