一起创业网-为互联网创业者服务

程序怎么找质数

寻找质数的方法有多种,下面列出几种常见的方法及其代码示例:

1. 穷举法

穷举法是最简单直接的方法,通过遍历从2到n之间的所有整数,检查它们是否能整除n。如果能整除,则n不是质数;如果都不能整除,则n是质数。

```cpp

include

include

using namespace std;

vector findPrimes(int n) {

vector primes;

for (int i = 2; i <= n; ++i) {

bool isPrime = true;

for (int j = 2; j * j <= i; ++j) {

if (i % j == 0) {

isPrime = false;

break;

}

}

if (isPrime) {

primes.push_back(i);

}

}

return primes;

}

int main() {

int n;

cin >> n;

vector primes = findPrimes(n);

for (int prime : primes) {

cout << prime << " ";

}

cout << endl;

return 0;

}

```

2. 埃氏筛法

埃氏筛法是一种高效的寻找质数的方法。它通过逐步筛选掉合数,最终留下质数。

```cpp

include

include

using namespace std;

vector findPrimes(int n) {

vector isPrime(n + 1, true);

isPrime = isPrime = false;

for (int i = 2; i * i <= n; ++i) {

if (isPrime[i]) {

for (int j = i * i; j <= n; j += i) {

isPrime[j] = false;

}

}

}

vector primes;

for (int i = 2; i <= n; ++i) {

if (isPrime[i]) {

primes.push_back(i);

}

}

return primes;

}

int main() {

int n;

cin >> n;

vector primes = findPrimes(n);

for (int prime : primes) {

cout << prime << " ";

}

cout << endl;

return 0;

}

```

3. 部分遍历法

部分遍历法是对埃氏筛法的一种优化,通过只遍历到sqrt(n)来减少计算量。

```cpp

include

include

using namespace std;

vector findPrimes(int n) {

vector isPrime(n + 1, true);

isPrime = isPrime = false;

for (int i = 2; i * i <= n; ++i) {

if (isPrime[i]) {

for (int j = i * i; j <= n; j += i) {

isPrime[j] = false;

}

}

}

vector primes;

for (int i = 2; i <= n; ++i) {

if (isPrime[i]) {

primes.push_back(i);

}

}

return primes;

}

int main() {

int n;

cin >> n;

vector primes = findPrimes(n);

for (int prime : primes) {

cout << prime << " ";

}

cout << endl;

return 0;

}

```

4. 奇数求余法

奇数求余法通过列出所有奇数并检查它们是否能被小于它自身的奇数整除来寻找质数。