在C++中高效查找素數可以使用篩選法,比如埃拉托斯特尼篩法(Sieve of Eratosthenes)。這種算法可以在O(nloglog(n))的時間復雜度內找到小于n的所有素數。
以下是一個使用埃拉托斯特尼篩法查找素數的示例代碼:
#include <iostream>
#include <vector>
std::vector<int> findPrimes(int n) {
std::vector<bool> isPrime(n+1, true);
std::vector<int> primes;
for (int p = 2; p*p <=n; p++) {
if (isPrime[p]) {
for (int i = p*p; i <= n; i += p) {
isPrime[i] = false;
}
}
}
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
primes.push_back(p);
}
}
return primes;
}
int main() {
int n = 100;
std::vector<int> primes = findPrimes(n);
for (int prime : primes) {
std::cout << prime << " ";
}
return 0;
}
在上面的代碼中,首先創建一個大小為n+1的布爾型數組isPrime,用來表示每個數字是否為素數。然后從2開始遍歷數組,將所有素數的倍數標記為非素數。最后再遍歷數組,將所有標記為素數的數字放入primes數組中,最終返回primes數組即可。
這種方法可以高效地找到小于n的所有素數,時間復雜度為O(nloglog(n))。