RE 求助
查看原帖
RE 求助
470348
oddy楼主2022/3/25 20:23

5 个点全 RE,加了一堆 assert 也没调出来。我哪里错了?

#include <cstdio>
#include <cassert>
#include <bitset>

inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
    return x*f;
}

inline void write(int x)
{
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10+'0');
}

std::bitset<100000001> isprime;
int prime[1000001];

void init(int n) {
    int p;
    for(int i = 2; i <= n; i++) {
        assert(i >= 0 && i <= 100000000);
        if(!isprime[i]){
            assert(p+1 >= 0 && p+1 <= 1000000);
            prime[++p] = i;
        }
        for(int j = 1; j <= p && i * prime[j] <= n; j++) {
            assert(j >= 0 && j <= 1000000);
            assert(i * prime[j] >= 0 && i * prime[j] <= 100000000);
            isprime[i * prime[j]] = true;
            if(i % prime[j] == 0) break;
        }
    }
}

int main() {
    int n, q, k;
    for(n = read(), q = read(),init(n); q; --q)
        write(prime[read()]), putchar('\n');
    return 0;
}
2022/3/25 20:23
加载中...