3765. 完全质数
题目描述
给你一个整数 num。
如果一个数 num 的每一个 前缀 和每一个 后缀 都是 质数,则称该数为 完全质数。
如果 num 是完全质数,返回 true,否则返回 false。
注意:
- 一个数的 前缀 是由该数的 前
k位数字构成的。 - 一个数的 后缀 是由该数的 后
k位数字构成的。 - 质数 是大于 1 且只有两个因子(1 和它本身)的自然数。
- 个位数只有在它是 质数 时才被视为完全质数。
示例 1:
输入:num = 23
输出:true
解释:
num = 23的前缀是 2 和 23,它们都是质数。num = 23的后缀是 3 和 23,它们都是质数。- 所有的前缀和后缀都是质数,所以 23 是完全质数,答案是
true。
示例 2:
输入:num = 39
输出:false
解释:
num = 39的前缀是 3 和 39。3 是质数,但 39 不是质数。num = 39的后缀是 9 和 39。9 和 39 都不是质数。- 至少有一个前缀或后缀不是质数,所以 39 不是完全质数,答案是
false。
示例 3:
输入:num = 7
输出:true
解释:
- 7 是质数,所以它的所有前缀和后缀都是质数,答案是
true。
提示:
1 <= num <= 109
解法
方法一:数学
我们定义一个函数 \(\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}\) 的大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |