怎么编程序选出质数

时间:2025-01-17 16:25:50 游戏攻略

要编写程序选出质数,可以采用以下几种方法:

基本判断法

遍历从2到N-1的所有整数,判断N是否能被这些数整除。如果能被整除,则N不是质数;如果都不能整除,则N是质数。这种方法的时间复杂度为O(N^2),效率较低,尤其是对于较大的N。

优化遍历法

由于质数除了2以外都是奇数,因此可以只遍历奇数进行判断。这样可以减少一半的判断次数。

进一步优化是只遍历到N的平方根,因为如果N有一个大于平方根的因数,那么它必定还有一个小于等于平方根的因数。

埃氏筛法

埃氏筛法是一种高效的质数筛选算法。它的基本思想是从2开始,将每个质数的倍数标记为非质数。具体步骤如下:

初始化一个长度为N+1的数组,用来表示从2到N的所有数,初始都标记为质数。

从2开始遍历数组,若当前数字未被标记为非质数,则将其所有倍数标记为非质数。同时,每次标记后,不需要重复判断它的倍数。

遍历完整个数组后,剩下的未被标记为非质数的数字即为质数。

输入两个整数,输出之间的所有质数

提示用户输入两个正整数,编程求出介于这两个数之间的所有质数并打印输出。可以通过遍历从输入的最小值到最大值之间的所有整数,并使用上述方法判断每个数是否为质数来实现。

示例代码(使用埃氏筛法)

```cpp

include

include

include

void sieveOfEratosthenes(int n) {

std::vector isPrime(n + 1, true);

isPrime = false;

isPrime = false;

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

if (isPrime[i]) {

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

isPrime[j] = false;

}

}

}

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

if (isPrime[i]) {

std::cout<< i << " ";

}

}

std::cout << std::endl;

}

int main() {

int start, end;

std::cout << "请输入开始的整数值: ";

std::cin >> start;

std::cout << "请输入结束的整数值: ";

std::cin >> end;

std::cout << "介于 " << start << " 和 " << end << " 之间的质数有: ";

sieveOfEratosthenes(end);

return 0;

}

```

示例代码(输入两个整数,输出之间的所有质数)

```cpp

include

void printPrimesInRange(int start, int end) {

for (int i = start; i <= end; ++i) {

if (isPrime(i)) {

std::cout<< i << " ";

}

}

std::cout << std::endl;

}

bool isPrime(int n) {

if (n <= 1) return false;

if (n == 2) return true;

if (n % 2 == 0) return false;

for (int i = 3; i <= std::sqrt(n); i += 2) {

if (n % i == 0) {

return false;

}

}

return true;

}

int main() {

int start, end;

std::cout << "请输入开始的整数值: ";

std::cin >> start;

std::cout << "请输入结束的整数值: ";

std::cin >> end;

std::cout << "介于 " << start << " 和 " << end << " 之间的质数有: ";

printPrimesInRange(start, end);

return 0;

}

```

这两种方法