🔗 leetcode.com/problems/pr…
题目
- 给一个数组,针对其中的每一个数字 num[i],可以不动,也可以减去一个素数 p,要求是这个素数小于 num[i];
- 判断是否存在严格升序的数组;
思路
- 按顺序调整 num[i],最优的 p,是满足 p< num[i] && num[i] - p > num[i-1] 的最大值;
- HINT,1 不是素数,2是素数;
代码
class Solution {
public:
bool is_prime(int num) {
int tmp = sqrt(num)
for (int i = 2
if (num % i == 0) return false
}
return true
}
bool primeSubOperation(vector<int>& nums) {
// setup
vector<bool> prime(1010)
prime[1] = false
prime[2] = true
for (int i = 3
prime[i] = is_prime(i)
}
// adjust nums
int pre = 0
for (int i = 0
int num = nums[i]
for (int j = num-1
if (!prime[j]) continue
if (num -j > pre) {
nums[i] = num -j
break
}
}
pre = nums[i]
//printf("num %d ", nums[i])
}
// check
for (int i = 1
if (nums[i] <= nums[i-1]) return false
}
return true
}
}