使用埃氏筛法无法通过第二点
查看原帖
使用埃氏筛法无法通过第二点
1086109
ComradePenguin1917楼主2023/11/1 14:41
#include <iostream>
#include <string.h>
#include <cstdio>
#include <cmath>
using namespace std;

int L, sum = 0, cnt = 0;
bool prime_book[100008], flag = true;

void get_prime(int &n) {
    memset(prime_book, true, sizeof(prime_book));
    int x = sqrt(n);
    for (int i = 2; i <= x; ++i) {
        if (prime_book[i]) {
            for (int j = 2; j <= n / i; ++j) {
                prime_book[i * j] = false;
            }
        }
    }
}

int main() {
    scanf("%d", &L);
    get_prime(L);
    if(L == 1) {
        printf("0\n0");
        return 0;
    }
    for (int i = 2; i <= L; ++i) {
        if (prime_book[i]) {
            sum += i;
        }
        if (sum < L && prime_book[i]) {
            ++cnt;
            printf("%d\n", i);
        }
        if (sum == L) {
            ++cnt;
            printf("%d\n%d", i, cnt);
            break;
        }
        if (sum > L) {
            printf("%d\n", cnt);
            break;
        }
    }
    return 0;
}
2023/11/1 14:41
加载中...