📅  最后修改于: 2023-12-03 15:25:22.890000             🧑  作者: Mango
素数是指只能被1和本身整除的自然数,例如2、3、5、7、11、13等。给定一个数字n,本文将介绍如何找到小于n的所有素数。
我们可以通过一个叫做“筛法”的方法来找到小于n的所有素数。具体而言,我们从小到大遍历自然数,对于每个数,将其所有的倍数都标记为非质数。最终,未被标记的自然数即为所有素数。
#include <iostream>
#include <vector>
using namespace std;
// 寻找小于n的所有素数
vector<int> findPrimes(int n) {
vector<int> primes;
vector<bool> isPrime(n + 1, true);
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primes.push_back(i);
for (int j = i * 2; j <= n; j += i) {
isPrime[j] = false;
}
}
}
return primes;
}
int main() {
int n;
cout << "请输入一个自然数n:";
cin >> n;
vector<int> primes = findPrimes(n);
cout << "小于" << n << "的素数有:" << endl;
for (int prime : primes) {
cout << prime << " ";
}
cout << endl;
return 0;
}
代码解释:
findPrimes
,该函数接受一个自然数n作为参数,返回小于n的所有素数。findPrimes
函数中,首先定义了一个空向量primes
和一个长度为n+1的布尔型数组isPrime
,其中isPrime[i]
表示i是否为素数。primes
中,并将i的所有倍数标记为非素数。primes
中存储的即为小于n的所有素数。我们将n分别设置为10、50和100进行测试。
测试代码:
int main() {
cout << "测试n=10" << endl;
vector<int> primes = findPrimes(10);
for (int prime : primes) {
cout << prime << " ";
}
cout << endl;
cout << "测试n=50" << endl;
primes = findPrimes(50);
for (int prime : primes) {
cout << prime << " ";
}
cout << endl;
cout << "测试n=100" << endl;
primes = findPrimes(100);
for (int prime : primes) {
cout << prime << " ";
}
cout << endl;
return 0;
}
测试结果:
测试n=10
2 3 5 7
测试n=50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
测试n=100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
通过以上代码和测试,我们成功地使用筛法找到了小于给定数字n的所有素数。在实际编程中,我们也可以使用该算法来判断一个数字是否为素数。