Untitled
unknown
plain_text
5 months ago
1.1 kB
3
Indexable
class Solution { public: int spf[1000001]; void sieve(int mx){ for(int i=1; i<=mx; ++i){ spf[i] = i; } for(int i=2; i*i<=mx; ++i){ if(spf[i] == i){ for(int j=i*i; j<=mx; j+=i){ if(spf[j] == j){ spf[j] = i; } } } } } int gpd(int n){ return (n == 1 ? 1 : n/spf[n]); } int minOperations(vector<int>& nums) { int ans = 0, n = nums.size(); // spf.resize(1e6+2); sieve(1e6); // for(int i=0; i<1e6; ++i){ // cout<<spf[i]<<" "; // } // cout<<gpd(9)<<endl; for(int i=n-2; i>=0; --i){ if(nums[i] > nums[i+1]){ int div = gpd(nums[i]); if(nums[i]/div > nums[i+1]) return -1; nums[i] = nums[i]/div; ans++; } } return ans; } };
Editor is loading...
Leave a Comment