AC

 •  17天前


#include <iostream>
#include <vector>
using namespace std;

vector<int> generatePrimes(int n) {
    if (n < 2) return vector<int>();
    vector<bool> isPrime(n + 1, true);
    isPrime[0] = false;
    isPrime[1] = false;
    for (int i = 2; i * i <= n; i++) {
        if (isPrime[i]) {
            for (int j = i * i; j <= n; j += i) {
                isPrime[j] = false;
            }
        }
    }
    vector<int> primes;
    for (int i = 2; i <= n; i++) {
        if (isPrime[i]) {
            primes.push_back(i);
        }
    }
    return primes;
}

int main() {
    vector<int> inputs;
    int n;
    int max_n = 0;
    while (cin >> n) {
        inputs.push_back(n);
        if (n > max_n) {
            max_n = n;
        }
    }
    
    if (max_n < 2) {
        for (int n : inputs) {
            cout << 0 << endl;
        }
        return 0;
    }
    
    vector<int> primes = generatePrimes(max_n);
    vector<long long> dp(max_n + 1, 0);
    dp[0] = 1;
    for (int p : primes) {
        for (int i = p; i <= max_n; i++) {
            dp[i] += dp[i - p];
        }
    }
    
    for (int n : inputs) {
        cout << dp[n] << endl;
    }
    
    return 0;
}

评论:

请先登录,才能进行评论