※ 引述 《JIWP (神楽めあ的錢包)》 之銘言:
:
: 2601. Prime Subtraction Operation
:
: 有一個長度為n的矩陣:nums
:
: 你可以執行多次以下的操作
:
: 選擇nums裡的一個元素nums[i],並將nums[i]減去一個比他小的質數
:
: 請問你執行若干次上述的操作後
:
: nums是否可以變成一個嚴格遞增的矩陣?
:
: 思路:
:
: 這題最難的就是找到有哪些質數
:
: 因為題目限制,所以找1000以下的質數就好
:
思路:
一樣
每次都把最大可以減掉的質數減掉就好了
姆咪
@rainkaras
@DJ寶
@sustainer
刷題時間到了
```cpp
class Solution {
public:
vector<int> ppp;
bool isp(int p)
{
for(int i = 2 ; i <= sqrt(p) ; i ++)
{
if(p%i == 0)return 0;
}
return 1;
}
void primefind()
{
for(int i = 2 ; i < 1000 ; i ++)
{
if(isp(i))ppp.push_back(i);
}
}
int findap(int num )
{
int l = 0 ;
int r = ppp.size()-1;
while(l<=r)
{
int m = (l+r)/2;
if(ppp[m] < num)
{
l = m+1;
}
else
{
r = m-1;
}
}
return ppp[r];
}
bool primeSubOperation(vector<int>& nums)
{
primefind();
int n = nums.size();
for(int i = 0 ; i < nums.size() ; i ++)
{
// cout << findap(nums[i]) << " ";
int take = nums[i];
if(i != 0)
{
take -= nums[i-1];
}
if(take <= 2 )continue;
nums[i] -= findap(take);
}
// cout << endl;
// for(int i = 0 ; i < nums.size() ; i ++)cout << nums[i] << " ";
for(int i = 1 ; i < nums.size() ; i ++)
{
if(nums[i] <= nums[i-1])return 0;
}
return 1;
}
};
```
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.165.164 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1731340891.A.60F.html