|
发表于 2022-1-15 19:24:31
|
显示全部楼层
- /*
- 答案:1097343
- 耗时:0.572562秒
- */
- #include <iostream>
- #include <cstring>
- #include <algorithm>
- #include <vector>
- using namespace std;
- const int N = 50000000;
- char cp[N];
- vector<int> v2, v3, v4, v34;
- int main(void)
- {
- memset(cp + 2, 1, (N - 2) * sizeof(char));
- for (int i = 2; i <= (int)sqrt((double)N); ++i)
- {
- if (cp[i] == 0)
- continue;
- for (int j = i * i; j < N; j += i)
- cp[j] = 0;
- }
- for (int i = 2; i <= (int)sqrt((double)N); ++i)
- {
- if (cp[i] == 0)
- continue;
- long long j = i;
- j *= i;
- if (j >= N)
- break;
- else
- {
- v2.push_back(j);
- j *= i;
- if (j < N)
- {
- v3.push_back(j);
- j *= i;
- if (j < N)
- v4.push_back(j);
- }
- }
- }
- for (int i = 0; i < (int)v3.size(); ++i)
- {
- for (int j = 0; j < (int)v4.size(); ++j)
- {
- if (v3[i] + v4[j] >= N)
- break;
- v34.push_back(v3[i] + v4[j]);
- }
- }
- v3.clear();
- sort(v34.begin(), v34.end());
- auto itr = unique(v34.begin(), v34.end());
- int n = int(itr - v34.begin());
- v34.resize(n);
- for (int i = 0; i < (int)v2.size(); ++i)
- {
- for (int j = 0; j < (int)v34.size(); ++j)
- {
- if (v2[i] + v34[j] >= N)
- break;
- v3.push_back(v2[i] + v34[j]);
- }
- }
- sort(v3.begin(), v3.end());
- itr = unique(v3.begin(), v3.end());
- int nCount = 0;
- for (int i = 28; i < N; ++i)
- {
- if (binary_search(v3.begin(), itr, i))
- ++nCount;
- }
- cout << nCount << endl;
- return 0;
- }
复制代码 |
|