C++用筛选法求100以内的素数
时间: 2023-09-10 08:06:20 浏览: 185
以下是用C++语言实现筛选法求100以内的素数的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const int maxn = 100;
bool prime[maxn + 1];
memset(prime, true, sizeof(prime)); // 初始化全部为true
for (int p = 2; p <= maxn; p++)
{
if (prime[p])
{
cout << p << " "; // 输出当前素数
for (int i = p * p; i <= maxn; i += p)
{
prime[i] = false; // 将当前素数的倍数标记为非素数
}
}
}
return 0;
}
```
程序首先定义了一个`prime`数组,表示当前下标对应的数是否为素数。然后使用`memset`函数初始化所有元素为`true`。
接着使用双重循环,外层循环从2开始枚举每个数,内层循环从当前素数的平方开始,每次增加素数个数的步长,将当前素数的倍数标记为非素数。
最后输出所有素数即可。
相关问题
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}$,如果当前数是素数,则将其倍数都标记为非素数。最后,输出所有素数即可。
c++,用筛选法求100以内的素数。
c++,用筛选法求100以内的素数[^2]。
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int arr[101] = {0};
for(int i = 2; i <= sqrt(100); i++) // 从2开始到根号100
{
if(arr[i] == 0) // 如果该数未被筛选
{
for(int j = i * i; j <= 100; j += i) // 则将其倍数筛选
{
arr[j] = 1;
}
}
}
for(int i = 2; i <= 100; i++) // 打印素数
{
if(arr[i] == 0)
cout << i << "是素数" << endl;
}
return 0;
}
```
阅读全文