📅  最后修改于: 2023-12-03 15:29:41.282000             🧑  作者: Mango
本文将介绍如何使用C/C++程序查找给定范围之间的素数。在开始本文之前,建议您了解一些基本的C/C++语法和算法知识。
素数指的是只能被1和本身整除的自然数(不包括1)。例如,2、3、5、7、11、13等都是素数。
要查找给定范围之间的素数,可以使用质数筛选法。该方法的基本原理如下:
下面是实现给定范围之间素数查找的C/C++代码示例,共分为三个步骤。
本程序要求输入要查找的范围。
#include <iostream>
using namespace std;
int main() {
int startNum, endNum;
cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
cin >> startNum >> endNum;
return 0;
}
接下来,我们使用质数筛选法查找素数。在此过程中,我们需要使用一个布尔数组标记每个数字是否为素数。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int startNum, endNum;
bool isPrime[100005];
memset(isPrime, true, sizeof(isPrime)); // 初始化所有数字均为素数
cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
cin >> startNum >> endNum;
if (startNum < 2) startNum = 2; // 从2开始查找
for (int i = 2; i * i <= endNum; i++) { // 只需要查找到sqrt(endNum)
if (isPrime[i]) { // 若i为素数,则将i的倍数标记为非素数
for (int j = i * 2; j <= endNum; j += i) {
isPrime[j] = false;
}
}
}
for (int i = startNum; i <= endNum; i++) { // 输出素数
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
最后,我们将所有的素数输出。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int startNum, endNum;
bool isPrime[100005];
memset(isPrime, true, sizeof(isPrime)); // 初始化所有数字均为素数
cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
cin >> startNum >> endNum;
if (startNum < 2) startNum = 2; // 从2开始查找
for (int i = 2; i * i <= endNum; i++) { // 只需要查找到sqrt(endNum)
if (isPrime[i]) { // 若i为素数,则将i的倍数标记为非素数
for (int j = i * 2; j <= endNum; j += i) {
isPrime[j] = false;
}
}
}
cout << "在 " << startNum << " 和 " << endNum << " 之间的素数为:";
for (int i = startNum; i <= endNum; i++) { // 输出素数
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
至此,我们已经完成了使用C/C++程序查找给定范围之间的素数的实现。如果您有任何疑问或建议,欢迎在评论区留言。