From 94e002a1e407f40a0bfa9016b3c8eec88e0161ef Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 7 Dec 2025 08:10:27 +0800 Subject: [PATCH] feat: add solutions to lc problem: No.3765 --- .../3765.Complete Prime Number/README.md | 175 +++++++++++++++++- .../3765.Complete Prime Number/README_EN.md | 175 +++++++++++++++++- .../3765.Complete Prime Number/Solution.cpp | 38 ++++ .../3765.Complete Prime Number/Solution.go | 35 ++++ .../3765.Complete Prime Number/Solution.java | 34 ++++ .../3765.Complete Prime Number/Solution.py | 20 ++ .../3765.Complete Prime Number/Solution.ts | 33 ++++ 7 files changed, 502 insertions(+), 8 deletions(-) create mode 100644 solution/3700-3799/3765.Complete Prime Number/Solution.cpp create mode 100644 solution/3700-3799/3765.Complete Prime Number/Solution.go create mode 100644 solution/3700-3799/3765.Complete Prime Number/Solution.java create mode 100644 solution/3700-3799/3765.Complete Prime Number/Solution.py create mode 100644 solution/3700-3799/3765.Complete Prime Number/Solution.ts diff --git a/solution/3700-3799/3765.Complete Prime Number/README.md b/solution/3700-3799/3765.Complete Prime Number/README.md index 132bede322424..48a363d49a61d 100644 --- a/solution/3700-3799/3765.Complete Prime Number/README.md +++ b/solution/3700-3799/3765.Complete Prime Number/README.md @@ -91,32 +91,199 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3700-3799/3765.Co -### 方法一 +### 方法一:数学 + +我们定义一个函数 $\text{is\_prime}(x)$ 来判断一个数 $x$ 是否为质数。具体地,如果 $x < 2$,则 $x$ 不是质数;否则,我们检查从 $2$ 到 $\sqrt{x}$ 的所有整数 $i$,如果存在某个 $i$ 能整除 $x$,则 $x$ 不是质数,否则 $x$ 是质数。 + +接下来,我们将整数 $\textit{num}$ 转换为字符串 $s$,并依次检查 $s$ 的每个前缀和后缀所对应的整数是否为质数。对于前缀,我们从左到右构造整数 $x$,对于后缀,我们从右到左构造整数 $x$。如果在检查过程中发现某个前缀或后缀对应的整数不是质数,则返回 $\text{false}$;如果所有前缀和后缀对应的整数都是质数,则返回 $\text{true}$。 + +时间复杂度 $O(\sqrt{n} \times \log n)$,空间复杂度 $O(\log n)$,其中 $n$ 是整数 $\textit{num}$ 的大小。 #### Python3 ```python - +class Solution: + def completePrime(self, num: int) -> bool: + def is_prime(x: int) -> bool: + if x < 2: + return False + return all(x % i for i in range(2, int(sqrt(x)) + 1)) + + s = str(num) + x = 0 + for c in s: + x = x * 10 + int(c) + if not is_prime(x): + return False + x, p = 0, 1 + for c in s[::-1]: + x = p * int(c) + x + p *= 10 + if not is_prime(x): + return False + return True ``` #### Java ```java - +class Solution { + public boolean completePrime(int num) { + char[] s = String.valueOf(num).toCharArray(); + int x = 0; + for (int i = 0; i < s.length; i++) { + x = x * 10 + (s[i] - '0'); + if (!isPrime(x)) { + return false; + } + } + x = 0; + int p = 1; + for (int i = s.length - 1; i >= 0; i--) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + return true; + } + + private boolean isPrime(int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; i++) { + if (x % i == 0) { + return false; + } + } + return true; + } +} ``` #### C++ ```cpp - +class Solution { +public: + bool completePrime(int num) { + auto isPrime = [&](int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; ++i) { + if (x % i == 0) { + return false; + } + } + return true; + }; + + string s = to_string(num); + + int x = 0; + for (char c : s) { + x = x * 10 + (c - '0'); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + int p = 1; + for (int i = (int) s.size() - 1; i >= 0; --i) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; + } +}; ``` #### Go ```go +func completePrime(num int) bool { + isPrime := func(x int) bool { + if x < 2 { + return false + } + for i := 2; i*i <= x; i++ { + if x%i == 0 { + return false + } + } + return true + } + + s := strconv.Itoa(num) + + x := 0 + for i := 0; i < len(s); i++ { + x = x*10 + int(s[i]-'0') + if !isPrime(x) { + return false + } + } + + x = 0 + p := 1 + for i := len(s) - 1; i >= 0; i-- { + x = p*int(s[i]-'0') + x + p *= 10 + if !isPrime(x) { + return false + } + } + + return true +} +``` +#### TypeScript + +```ts +function completePrime(num: number): boolean { + const isPrime = (x: number): boolean => { + if (x < 2) return false; + for (let i = 2; i * i <= x; i++) { + if (x % i === 0) { + return false; + } + } + return true; + }; + + const s = String(num); + + let x = 0; + for (let i = 0; i < s.length; i++) { + x = x * 10 + (s.charCodeAt(i) - 48); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + let p = 1; + for (let i = s.length - 1; i >= 0; i--) { + x = p * (s.charCodeAt(i) - 48) + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; +} ``` diff --git a/solution/3700-3799/3765.Complete Prime Number/README_EN.md b/solution/3700-3799/3765.Complete Prime Number/README_EN.md index ef6f444f916bf..50cad1326598c 100644 --- a/solution/3700-3799/3765.Complete Prime Number/README_EN.md +++ b/solution/3700-3799/3765.Complete Prime Number/README_EN.md @@ -89,32 +89,199 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3700-3799/3765.Co -### Solution 1 +### Solution 1: Mathematics + +We define a function $\text{is\_prime}(x)$ to determine whether a number $x$ is prime. Specifically, if $x < 2$, then $x$ is not prime; otherwise, we check all integers $i$ from $2$ to $\sqrt{x}$. If there exists some $i$ that divides $x$, then $x$ is not prime; otherwise, $x$ is prime. + +Next, we convert the integer $\textit{num}$ to a string $s$, and sequentially check whether the integer corresponding to each prefix and suffix of $s$ is prime. For prefixes, we construct the integer $x$ from left to right; for suffixes, we construct the integer $x$ from right to left. If during the checking process we find that the integer corresponding to some prefix or suffix is not prime, we return $\text{false}$; if all integers corresponding to prefixes and suffixes are prime, we return $\text{true}$. + +The time complexity is $O(\sqrt{n} \times \log n)$, and the space complexity is $O(\log n)$, where $n$ is the value of the integer $\textit{num}$. #### Python3 ```python - +class Solution: + def completePrime(self, num: int) -> bool: + def is_prime(x: int) -> bool: + if x < 2: + return False + return all(x % i for i in range(2, int(sqrt(x)) + 1)) + + s = str(num) + x = 0 + for c in s: + x = x * 10 + int(c) + if not is_prime(x): + return False + x, p = 0, 1 + for c in s[::-1]: + x = p * int(c) + x + p *= 10 + if not is_prime(x): + return False + return True ``` #### Java ```java - +class Solution { + public boolean completePrime(int num) { + char[] s = String.valueOf(num).toCharArray(); + int x = 0; + for (int i = 0; i < s.length; i++) { + x = x * 10 + (s[i] - '0'); + if (!isPrime(x)) { + return false; + } + } + x = 0; + int p = 1; + for (int i = s.length - 1; i >= 0; i--) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + return true; + } + + private boolean isPrime(int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; i++) { + if (x % i == 0) { + return false; + } + } + return true; + } +} ``` #### C++ ```cpp - +class Solution { +public: + bool completePrime(int num) { + auto isPrime = [&](int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; ++i) { + if (x % i == 0) { + return false; + } + } + return true; + }; + + string s = to_string(num); + + int x = 0; + for (char c : s) { + x = x * 10 + (c - '0'); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + int p = 1; + for (int i = (int) s.size() - 1; i >= 0; --i) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; + } +}; ``` #### Go ```go +func completePrime(num int) bool { + isPrime := func(x int) bool { + if x < 2 { + return false + } + for i := 2; i*i <= x; i++ { + if x%i == 0 { + return false + } + } + return true + } + + s := strconv.Itoa(num) + + x := 0 + for i := 0; i < len(s); i++ { + x = x*10 + int(s[i]-'0') + if !isPrime(x) { + return false + } + } + + x = 0 + p := 1 + for i := len(s) - 1; i >= 0; i-- { + x = p*int(s[i]-'0') + x + p *= 10 + if !isPrime(x) { + return false + } + } + + return true +} +``` +#### TypeScript + +```ts +function completePrime(num: number): boolean { + const isPrime = (x: number): boolean => { + if (x < 2) return false; + for (let i = 2; i * i <= x; i++) { + if (x % i === 0) { + return false; + } + } + return true; + }; + + const s = String(num); + + let x = 0; + for (let i = 0; i < s.length; i++) { + x = x * 10 + (s.charCodeAt(i) - 48); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + let p = 1; + for (let i = s.length - 1; i >= 0; i--) { + x = p * (s.charCodeAt(i) - 48) + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; +} ``` diff --git a/solution/3700-3799/3765.Complete Prime Number/Solution.cpp b/solution/3700-3799/3765.Complete Prime Number/Solution.cpp new file mode 100644 index 0000000000000..444905195ae92 --- /dev/null +++ b/solution/3700-3799/3765.Complete Prime Number/Solution.cpp @@ -0,0 +1,38 @@ +class Solution { +public: + bool completePrime(int num) { + auto isPrime = [&](int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; ++i) { + if (x % i == 0) { + return false; + } + } + return true; + }; + + string s = to_string(num); + + int x = 0; + for (char c : s) { + x = x * 10 + (c - '0'); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + int p = 1; + for (int i = (int) s.size() - 1; i >= 0; --i) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; + } +}; diff --git a/solution/3700-3799/3765.Complete Prime Number/Solution.go b/solution/3700-3799/3765.Complete Prime Number/Solution.go new file mode 100644 index 0000000000000..1a7bda059523d --- /dev/null +++ b/solution/3700-3799/3765.Complete Prime Number/Solution.go @@ -0,0 +1,35 @@ +func completePrime(num int) bool { + isPrime := func(x int) bool { + if x < 2 { + return false + } + for i := 2; i*i <= x; i++ { + if x%i == 0 { + return false + } + } + return true + } + + s := strconv.Itoa(num) + + x := 0 + for i := 0; i < len(s); i++ { + x = x*10 + int(s[i]-'0') + if !isPrime(x) { + return false + } + } + + x = 0 + p := 1 + for i := len(s) - 1; i >= 0; i-- { + x = p*int(s[i]-'0') + x + p *= 10 + if !isPrime(x) { + return false + } + } + + return true +} diff --git a/solution/3700-3799/3765.Complete Prime Number/Solution.java b/solution/3700-3799/3765.Complete Prime Number/Solution.java new file mode 100644 index 0000000000000..6822c729c58d9 --- /dev/null +++ b/solution/3700-3799/3765.Complete Prime Number/Solution.java @@ -0,0 +1,34 @@ +class Solution { + public boolean completePrime(int num) { + char[] s = String.valueOf(num).toCharArray(); + int x = 0; + for (int i = 0; i < s.length; i++) { + x = x * 10 + (s[i] - '0'); + if (!isPrime(x)) { + return false; + } + } + x = 0; + int p = 1; + for (int i = s.length - 1; i >= 0; i--) { + x = p * (s[i] - '0') + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + return true; + } + + private boolean isPrime(int x) { + if (x < 2) { + return false; + } + for (int i = 2; i * i <= x; i++) { + if (x % i == 0) { + return false; + } + } + return true; + } +} diff --git a/solution/3700-3799/3765.Complete Prime Number/Solution.py b/solution/3700-3799/3765.Complete Prime Number/Solution.py new file mode 100644 index 0000000000000..a471b4513cd95 --- /dev/null +++ b/solution/3700-3799/3765.Complete Prime Number/Solution.py @@ -0,0 +1,20 @@ +class Solution: + def completePrime(self, num: int) -> bool: + def is_prime(x: int) -> bool: + if x < 2: + return False + return all(x % i for i in range(2, int(sqrt(x)) + 1)) + + s = str(num) + x = 0 + for c in s: + x = x * 10 + int(c) + if not is_prime(x): + return False + x, p = 0, 1 + for c in s[::-1]: + x = p * int(c) + x + p *= 10 + if not is_prime(x): + return False + return True diff --git a/solution/3700-3799/3765.Complete Prime Number/Solution.ts b/solution/3700-3799/3765.Complete Prime Number/Solution.ts new file mode 100644 index 0000000000000..5e7b8b4ca8a65 --- /dev/null +++ b/solution/3700-3799/3765.Complete Prime Number/Solution.ts @@ -0,0 +1,33 @@ +function completePrime(num: number): boolean { + const isPrime = (x: number): boolean => { + if (x < 2) return false; + for (let i = 2; i * i <= x; i++) { + if (x % i === 0) { + return false; + } + } + return true; + }; + + const s = String(num); + + let x = 0; + for (let i = 0; i < s.length; i++) { + x = x * 10 + (s.charCodeAt(i) - 48); + if (!isPrime(x)) { + return false; + } + } + + x = 0; + let p = 1; + for (let i = s.length - 1; i >= 0; i--) { + x = p * (s.charCodeAt(i) - 48) + x; + p *= 10; + if (!isPrime(x)) { + return false; + } + } + + return true; +}