|
1 |
| -function primePalindrome (n: number): number { |
2 |
| - const z: number[] = [] |
3 |
| - for (let x = 1; x <= 2e4; x++) { |
4 |
| - const y: Array<number|string> = [ |
5 |
| - String(x) + String(x).split('').reverse().join('') |
6 |
| - ] |
7 |
| - for (let i = 0; i < 10; i++) { |
8 |
| - y.push(String(x) + String(i) + String(x).split('').reverse().join('')) |
| 1 | +const s = [] |
| 2 | +const getS = () => { |
| 3 | + if (s.length) return |
| 4 | + const isPrime = (a) => { |
| 5 | + if (a === 1) return false |
| 6 | + for (let i = 2; i <= a / i; i++) { |
| 7 | + if (a % i === 0) return false |
9 | 8 | }
|
10 |
| - if (x < 10) y.push(x) |
11 |
| - z.push(...y.map(Number)) |
| 9 | + return true |
12 | 10 | }
|
| 11 | + for (let i = 1; i < 1e4; i++) { |
| 12 | + if (i < 10 && isPrime(i)) s.push(i) |
| 13 | +Bg |
| 14 | + // 偶数长 |
| 15 | + const a = Number(String(i) + String(i).split('').reverse().join('')) |
| 16 | + if (isPrime(a)) s.push(a) |
13 | 17 |
|
14 |
| - z.sort((a, b) => a - b) |
15 |
| - for (const val of z) { |
16 |
| - if (isPrime(val) && val >= n) return val |
17 |
| - } |
18 |
| - return -1 |
19 |
| - function isPrime (n: number): boolean { |
20 |
| - if (n === 1) return false |
21 |
| - for (let i = 2; i <= Math.sqrt(n); i++) { |
22 |
| - if (n % i === 0) return false |
| 18 | + // 奇数长 |
| 19 | + for (let j = 0; j < 10; j++) { |
| 20 | + const a = Number(String(i) + String(j) + String(i).split('').reverse().join('')) |
| 21 | + if (isPrime(a)) s.push(a) |
23 | 22 | }
|
24 |
| - return true |
25 | 23 | }
|
| 24 | + s.sort((a, b) => a - b) |
| 25 | +} |
| 26 | + |
| 27 | +function primePalindrome (n: number): number { |
| 28 | + getS() |
| 29 | + let l = 0; let r = s.length - 1 |
| 30 | + // console.log(s[r]) |
| 31 | + while (l < r) { |
| 32 | + const mid = l + r >> 1 |
| 33 | + if (s[mid] >= n) r = mid |
| 34 | + else l = mid + 1 |
| 35 | + } |
| 36 | + return s[l] |
26 | 37 | };
|
0 commit comments