File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change 1+ const int N = 1000;
2+ vector<int> lp(N + 1);
3+ vector<int> pr;
4+
5+ void linearSieve() {
6+ for (int i = 2; i <= N; ++i) {
7+ if (lp[i] == 0) {
8+ lp[i] = i;
9+ pr.push_back(i);
10+ }
11+ for (int j = 0; i * pr[j] <= N; ++j) {
12+ lp[i * pr[j]] = pr[j];
13+ if (pr[j] == lp[i]) {
14+ break;
15+ }
16+ }
17+ }
18+ }
19+
20+ class Solution {
21+ public:
22+ bool primeSubOperation(vector<int>& nums) {
23+ int n = nums.size();
24+ if (n == 1) return true;
25+ linearSieve();
26+ for (int i = n - 2; i >= 0; --i) {
27+ if (nums[i] >= nums[i + 1]) {
28+ int target = nums[i] - nums[i + 1] + 1;
29+ auto it = lower_bound(pr.begin(), pr.end(), target);
30+ if (it == pr.end() || *it >= nums[i]) return false;
31+ nums[i] -= *it;
32+ }
33+ }
34+ return true;
35+ }
36+ };
You can’t perform that action at this time.
0 commit comments