谁能帮我简化一下,端上两关
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复12
  • 已保存回复13
  • 发布时间2024/10/14 22:31
  • 上次更新2024/10/15 13:13:25
查看原帖
谁能帮我简化一下,端上两关
1338182
封禁用户楼主2024/10/14 22:31
#include <bits/stdc++.h>
using namespace std;
vector<int> sieveOfEratosthenes(int limit) {
    vector<bool> isPrime(limit + 1, true);
    vector<int> primes;
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i * i <= limit; ++i) {
        if (isPrime[i]) 
            for (int j = i * i; j <= limit; j += i) 
                isPrime[j] = false;
    }

    for (int i = 2; i <= limit; ++i) 
        if (isPrime[i]) primes.push_back(i);
    return primes;
}
int goldbachPartitions(int n, const vector<int>& primes) {
    int count = 0;
    int limit = n / 2;

    for (vector<int>::const_iterator it1 = primes.begin(); it1 != primes.end(); ++it1) {
        int p1 = *it1;
        if (p1 > limit) break;
        for (vector<int>::const_iterator it2 = it1; it2 != primes.end(); ++it2) {
            int p2 = *it2;
            if (p2 > limit) break;
            int p3 = n - p1 - p2;
            for(vector<int>::const_iterator it3 = it2; it3 != primes.end(); ++it3) {
                if (*it3 == p3) { ount++; break; }
				else if (*it3 > p3) break;
            }
        }
    }

    return count;
}
int main() {
    cin >> n;
    const int LIMIT = 350000;
    vector<int> primes = sieveOfEratosthenes(LIMIT);
    int result = goldbachPartitions(n, primes);
    cout <<result << endl;
    return 0;
}

要求:变量名(函数名简写),那些复杂的不常用的代码改为其他常用的代码;

样例:19 输出3

2024/10/14 22:31
加载中...