看板 Marginalman
※ 引述 《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