classSolution{public:boolprimeSubOperation(vector<int>&nums){constexprintkMax=1000;constvector<int>primes=sieveEratosthenes(kMax);intprevNum=0;for(intnum:nums){// Make nums[i] the smallest as possible and still > nums[i - 1].constautoit=ranges::lower_bound(primes,num-prevNum);if(it!=primes.begin())num-=*prev(it);if(num<=prevNum)returnfalse;prevNum=num;}returntrue;}vector<int>sieveEratosthenes(intn){vector<int>primes;vector<bool>isPrime(n,true);isPrime[0]=false;isPrime[1]=false;for(inti=2;i*i<n;++i)if(isPrime[i])for(intj=i*i;j<n;j+=i)isPrime[j]=false;for(inti=2;i<n;++i)if(isPrime[i])primes.push_back(i);returnprimes;}};
classSolution{publicbooleanprimeSubOperation(int[]nums){finalintMAX=1000;finalList<Integer>primes=sieveEratosthenes(MAX);intprevNum=0;for(intnum:nums){// Make nums[i] the smallest as possible and still > nums[i - 1].finalinti=firstGreaterEqual(primes,num-prevNum);if(i>0)num-=primes.get(i-1);if(num<=prevNum)returnfalse;prevNum=num;}returntrue;}privateList<Integer>sieveEratosthenes(intn){List<Integer>primes=newArrayList<>();boolean[]isPrime=newboolean[n];Arrays.fill(isPrime,true);isPrime[0]=false;isPrime[1]=false;for(inti=2;i*i<n;++i)if(isPrime[i])for(intj=i*i;j<n;j+=i)isPrime[j]=false;for(inti=2;i<n;++i)if(isPrime[i])primes.add(i);returnprimes;}privateintfirstGreaterEqual(List<Integer>A,inttarget){finalinti=Collections.binarySearch(A,target);returni<0?-i-1:i;}}
classSolution:defprimeSubOperation(self,nums:list[int])->bool:MAX=1000primes=self._sieveEratosthenes(MAX)prevNum=0fornuminnums:# Make nums[i] the smallest as possible and still > nums[i - 1].i=bisect.bisect_left(primes,num-prevNum)ifi>0:num-=primes[i-1]ifnum<=prevNum:returnFalseprevNum=numreturnTruedef_sieveEratosthenes(self,n:int)->list[int]:isPrime=[True]*nisPrime[0]=FalseisPrime[1]=Falseforiinrange(2,int(n**0.5)+1):ifisPrime[i]:forjinrange(i*i,n,i):isPrime[j]=Falsereturn[iforiinrange(n)ifisPrime[i]]
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π