当前位置: 面试刷题>> 缺失的第1个素数 (经典算法题500道)
**题目描述**:
在一个给定的正整数范围内(比如从2到N,N是一个大于2的整数),找出并返回缺失的第一个素数。这里的“缺失”是指在该范围内,按素数自然递增的顺序(即2, 3, 5, 7, ...)本应存在的素数,但实际上不存在的那个素数。
**示例**:
假设给定的范围是 2 到 10,在这个范围内素数是 2, 3, 5, 7,而下一个按递增顺序的素数是 11,但在 2 到 10 范围内缺失的第一个素数是 11 的前一个素数序列中的数,即 11 不在考虑范围内,因为我们在找的是这个范围内“缺失”的素数。由于 2 到 10 范围内的素数都是连续的,因此没有缺失的素数,但如果范围是 2 到 9,则缺失的第一个素数是 11 前面的素数,即 11 并不在范围内,而实际上在 2 到 9 之后紧接着的素数是 11,但在这个问题的语境下,我们可以认为没有缺失的素数(因为范围外的数不被考虑)。不过,为了演示算法,我们可以假定一个范围,比如 2 到 15,其中缺失的第一个素数是 11(因为 11 是按素数递增顺序在范围内之后紧接着的素数,但在范围内并未出现)。
**注意**:实际上,按照上述解释,直接找出给定范围之后紧接着的素数作为“缺失的第一个素数”并不完全符合常规理解的“缺失”,但为了题目的趣味性和算法练习,我们可以这样设定。
**PHP 示例代码**:
```php
function isPrime($num) {
if ($num <= 1) {
return false;
}
for ($i = 2; $i * $i <= $num; $i++) {
if ($num % $i == 0) {
return false;
}
}
return true;
}
function findMissingFirstPrime($start, $end) {
$expectedPrime = $start;
while ($expectedPrime <= $end) {
if (!isPrime($expectedPrime)) {
$expectedPrime++;
continue;
}
if ($expectedPrime > $end) {
return $expectedPrime; // 找到了范围外紧接着的素数
}
$expectedPrime++;
}
// 如果所有范围内的数都是素数,则没有“缺失”的素数,可以返回null或特定值表示
return null;
}
echo findMissingFirstPrime(2, 15); // 输出 11
```
**Python 示例代码**:
```python
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def find_missing_first_prime(start, end):
expected_prime = start
while expected_prime <= end:
if not is_prime(expected_prime):
expected_prime += 1
continue
if expected_prime > end:
return expected_prime # 找到了范围外紧接着的素数
expected_prime += 1
# 如果所有范围内的数都是素数,则没有“缺失”的素数
return None
print(find_missing_first_prime(2, 15)) # 输出 11
```
**JavaScript 示例代码**:
```javascript
function isPrime(num) {
if (num <= 1) {
return false;
}
for (let i = 2; i * i <= num; i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
function findMissingFirstPrime(start, end) {
let expectedPrime = start;
while (expectedPrime <= end) {
if (!isPrime(expectedPrime)) {
expectedPrime++;
continue;
}
if (expectedPrime > end) {
return expectedPrime; // 找到了范围外紧接着的素数
}
expectedPrime++;
}
// 如果所有范围内的数都是素数,则没有“缺失”的素数
return null;
}
console.log(findMissingFirstPrime(2, 15)); // 输出 11
```
**码小课**:在码小课网站上,你可以找到更多关于算法和数据结构的内容,涵盖从基础到进阶的各种知识点,帮助你更好地理解和掌握编程技能。