C++输出2-100的质数,五个一行,有空白换行是什么原因?

#include<iostream>using namespace std;int main(){ int x,a=0,sum=0; int i; int b; int j=0; int s=0; b=0; for(x=2;x<=100;x++)//变量x值为2时开始循环(作为启动条件) x的值在<=100时 循环 每次循环后x的值+1 即在每一次内嵌循环中x固定 { b=0; for(i=2;i<=x-1;i++)//i的值为2时开始循环 在i<x-1范围内循环 每次循环后i的值+1 { if(x%i==0) b=1; } if (b==0)//如果b=0 即 x%i不为0 { cout<<x<<" "; sum=sum+b; a++;//输出这个数x 即x为质数 } if(a%5==0) cout<<endl; } cin.get(); cout<<sum; return 0;}

#include <iostream>

using namespace std;

int main()

{

    int x, a = 0, sum = 0;

    int i;

    int b;

    int j = 0;

    int s = 0;

    b = 0;

    for (x = 2; x <= 100; x++) //变量x值为2时开始循环(作为启动条件) x的值在<=100时 循环

                               //每次循环后x的值+1 即在每一次内嵌循环中x固定

    {

        b = 0;

        for (i = 2; i <= x - 1; i++) // i的值为2时开始循环 在i<x-1范围内循环 每次循环后i的值+1

        {

            if (x % i == 0)

                b = 1;

        }

        if (b == 0) //如果b=0 即 x%i不为0

        {

            cout << x << " ";

            sum = sum + b;

            a++; //输出这个数x 即x为质数

        //}

            if (a % 5 == 0)

                cout << endl;

        }

    }

    cin.get();

    cout << sum;

    return 0;

}

将 if (a % 5 == 0)语句整个包含进 if (b == 0) 分支中

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-01-30
质数个数 a 是 5 的倍数但下一个数不是质数的时候就不会 a++,而 a % 5 == 0 为真,于是就一直换行,直到遇到一个质数。应该把“if(a%5==0) cout<<endl;”放到上面那个 if 语句里面,只有输出了数最后才会换行。
并且你那个 sum 没用啊,总会是 0。
还有检测质数的地方可以优化一下,i 到 sqrt(x) 就够了。
相似回答