C++编程,利用筛法求100以内素数

如题所述

#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
    const int n = 100;
    bool a[101];
    int i, j;
     
    memset(a, 1, sizeof(a));
    a[1] = 0;
    for(i = 2; i <= sqrt(n); i ++)
    {
        if(a[i])
        {
            for(j = 2; j <= n/i; j ++)
            {
                a[i*j] = 0;
            }
        }
    }
    for(i = 2; i <= n; i ++)
    {
        if(a[i]) cout << i << " ";
    }
    return 0;
 
}

追问

为什么是bool[101]?100可以吗

追答

数组定义时的长度是从0开始计算的 即0-100 一共有101个数所以要定义为101,但本题中没有使用下标0,所以将算法稍作修改,让0-99 对应 数值1-100的话长度定义可以用100(一般不要在这里纠结太多,没什么意义)

追问

为什么用bool不用int

追答

bool 只占一个字节

int 一般占4个字节
你喜欢用int也可以

追问

为了省内存是吧?

追答

追问

好的,谢谢,我还有最后一个问题。
int main中为什么还有那一串代码…

那个括号我可以空着吧?

追答

可以

追问

那个括号里你写的是什么意思

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-31
char d[105] = {0, 1};
for (int i = 2; i <= 50; ++i)
for (int j = i*2; j <= 100; j +=i)
d[j] = 1;
for (int i = 1; i <= 100; ++i)
if (!d[i])
cout << i << " ";
相似回答