C++使用筛选法求100以内的素数
时间: 2023-09-10 11:05:39 浏览: 133
筛选法,也称埃氏筛法,可以用来求解一定范围内的素数。以下是 C++ 实现代码:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100;
int main() {
// 初始化数组,0 表示未访问过,1 表示不是素数,2 表示是素数
int vis[MAXN+1] = {0};
for (int i = 2; i <= MAXN; i++) {
if (!vis[i]) { // i 是素数
cout << i << " ";
for (int j = i * i; j <= MAXN; j += i) {
vis[j] = 1; // j 不是素数
}
}
}
return 0;
}
```
首先将数组初始化为 0,表示都未访问过。从 2 开始遍历到 100,如果当前数字 i 还没有被访问过,则将其输出,并将它的倍数(i * i,i * (i+1),i * (i+2),...)标记为不是素数。最后输出的就是 100 以内的所有素数。
相关问题
C++用筛选法求100以内的素数
可以使用筛选法(埃氏筛法)求100以内的素数,具体步骤如下:
1. 创建一个bool类型的数组,用于标记每个数字是否为素数。数组大小为101(0-100)。
2. 将数组中所有元素初始化为true。
3. 从2开始,将2的倍数(除2以外)标记为false。
4. 从3开始,将3的倍数(除3以外)标记为false。
5. 一直循环到sqrt(100),将每个素数的倍数(除自己以外)标记为false。
6. 输出所有标记为true的数字,即为100以内的素数。
下面是C++代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int main() {
bool isPrime[101];
for (int i = 0; i <= 100; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= 100; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= 100; j += i) {
isPrime[j] = false;
}
}
}
cout << "Prime numbers from 0 to 100: ";
for (int i = 2; i <= 100; i++) {
if (isPrime[i]) {
cout << i << " ";
}
}
return 0;
}
```
输出结果为: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 。
c++用筛选法求100以内的素数。
以下是使用筛选法求100以内素数的C++代码:
```c++
#include <iostream>
using namespace std;
int main() {
const int n = 100;
bool isPrime[n+1]; // 数组记录是否为素数
for(int i=2; i<=n; i++) {
isPrime[i] = true; // 先默认所有数都是素数
}
for(int i=2; i*i<=n; i++) {
if(isPrime[i]) {
// 如果当前数是素数,则将其倍数标记为非素数
for(int j=i*i; j<=n; j+=i) {
isPrime[j] = false;
}
}
}
// 输出所有素数
cout << "100以内的素数:";
for(int i=2; i<=n; i++) {
if(isPrime[i]) {
cout << i << " ";
}
}
cout << endl;
return 0;
}
```
在这个程序中,我们首先创建了一个长度为101的bool类型数组`isPrime`,用于记录每个数是否为素数。初始化时,我们将所有数都默认为素数。然后,我们从2开始遍历到$\sqrt{n}$,如果当前数是素数,则将其倍数都标记为非素数。最后,输出所有素数即可。
阅读全文
相关推荐












