求解,为什么这个筛子会挂掉
  • 板块学术版
  • 楼主Land_ER
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/8/6 11:42
  • 上次更新2023/10/27 16:46:56
查看原帖
求解,为什么这个筛子会挂掉
546558
Land_ER楼主2022/8/6 11:42
#include <bits/stdc++.h>

#define N 1300005
int primes[100005], cnt;
std::bitset<N> isprime;

void check(void) {
    isprime.set();
    isprime[1] = 0;

    for(int i = 2; i <= N; ++ i) {
        if(isprime[i])
            primes[++ cnt] = i;

        for(int j = 1; j <= cnt && i * primes[j] <= N; ++ j) {
            isprime[i * primes[j]] = false;
            if(!(i % primes[j]))
                break;
        }
    }

    return;
}

int main(void) {
    int n, p;

    check();

    while(true) {
        scanf("%d", &n);
        if(!n)
            break;
        
        p = std::lower_bound(primes, primes + N, n) - primes;
        if(primes[p] == n)
            puts("0\n");
        else
            printf("%d\n", primes[p] - primes[p - 1]);
    }
    
    return 0;
}

cnt 很诡异地指到了一个很大的数...

2022/8/6 11:42
加载中...