比一个素数大的最小素数和比他小的最大素数,c++,用迭代器
时间: 2024-10-18 09:11:04 浏览: 12
求素数,用vector存储的实现方法
在C++中,如果你想找到一个大于给定素数p的最小素数以及小于p的最大素数,可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来生成素数列表,然后使用迭代器进行查找。以下是基本步骤:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 判断是否为素数
bool isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i * i <= num; ++i)
if (num % i == 0) return false;
return true;
}
// 使用埃拉托斯特尼筛法生成素数
void sieveOfEratosthenes(int n, vector<int>& primes) {
vector<bool> isComposite(n + 1, false);
for (int p=2; p*p<=n; p++) {
if (!isComposite[p]) {
// 将p的倍数标记为合数
for (int i=p*p; i<=n; i += p)
isComposite[i] = true;
}
}
// 把非合数存入primes
for (int p=2; p<=n; p++)
if (!isComposite[p])
primes.push_back(p);
}
int main() {
int givenPrime;
cout << "Enter a prime number: ";
cin >> givenPrime;
vector<int> primes;
sieveOfEratosthenes(givenPrime + 1, primes); // 生成到givenPrime+1范围内的素数
// 找出大于给定素数的最小素数和小于给定素数的最大素数
int nextPrime = primes.back(); // 最大素数就是最后一个元素
if (nextPrime > givenPrime) { // 如果还有下一个素数,说明找到了最大素数
primes.pop_back();
while (primes.back() < givenPrime) {
primes.pop_back();
if (primes.empty()) break;
}
if (!primes.empty()) {
nextPrime = primes.back(); // 找到了第一个大于givenPrime的素数
} else {
nextPrime = -1; // 如果所有素数都小于givenPrime,设为-1表示找不到
}
}
cout << "Next prime greater than " << givenPrime << " is: " << nextPrime << endl;
cout << "Previous prime smaller than " << givenPrime << " is: " << primes.empty() ? -1 : primes[primes.size()-2] << endl;
// 相关问题--
阅读全文