diff --git a/solution/2600-2699/2601.Prime Subtraction Operation/README.md b/solution/2600-2699/2601.Prime Subtraction Operation/README.md index b6f011b5d6c23..5d41c8882c8a1 100644 --- a/solution/2600-2699/2601.Prime Subtraction Operation/README.md +++ b/solution/2600-2699/2601.Prime Subtraction Operation/README.md @@ -274,4 +274,86 @@ function primeSubOperation(nums: number[]): boolean { + + +### 方法二:预处理素数 + + + +#### TypeScript + +```ts +function primeSubOperation(nums: number[]): boolean { + const p: number[] = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +} +``` + +#### JavaScript + +```js +function primeSubOperation(nums) { + const p = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +} +``` + + + + + diff --git a/solution/2600-2699/2601.Prime Subtraction Operation/README_EN.md b/solution/2600-2699/2601.Prime Subtraction Operation/README_EN.md index 07438db2f7fb5..047fb08590edf 100644 --- a/solution/2600-2699/2601.Prime Subtraction Operation/README_EN.md +++ b/solution/2600-2699/2601.Prime Subtraction Operation/README_EN.md @@ -271,4 +271,86 @@ function primeSubOperation(nums: number[]): boolean { + + +### Solution 2: Preprocessing prime numbers + + + +#### TypeScript + +```ts +function primeSubOperation(nums: number[]): boolean { + const p: number[] = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +} +``` + +#### JavaScript + +```js +function primeSubOperation(nums) { + const p = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +} +``` + + + + + diff --git a/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.js b/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.js new file mode 100644 index 0000000000000..262e9d4983b26 --- /dev/null +++ b/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.js @@ -0,0 +1,31 @@ +function primeSubOperation(nums) { + const p = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +} diff --git a/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.ts b/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.ts new file mode 100644 index 0000000000000..4b2a46735fafc --- /dev/null +++ b/solution/2600-2699/2601.Prime Subtraction Operation/Solution2.ts @@ -0,0 +1,31 @@ +function primeSubOperation(nums: number[]): boolean { + const p: number[] = []; + const max = Math.max(...nums); + + for (let i = 2; i < max; i++) { + let isPrime = true; + + for (const x of p) { + if (i % x === 0) { + isPrime = false; + break; + } + } + + while (isPrime && p.length <= i) { + p.push(i); + } + } + + for (let i = nums.length - 2; i >= 0; i--) { + if (nums[i] < nums[i + 1]) continue; + + const [x, next] = [nums[i], nums[i + 1]]; + const prime = p[x - next + 1]; + + if (!prime || prime >= x) return false; + nums[i] -= prime; + } + + return true; +}