打印素数至N

时间:2019-01-19 04:01:11

标签: c++14

#include<iostream>
using namespace std;
int main()
{
    int N;
    cin>>N;
    int flag=1;
    for(int i=2;i<=N;i++){
        for(int j=2;j<i;j++){
            if(i%j==0){flag=0;break;}
            break;
        }
        if(flag==1){cout<<i<<" ";}
    }
    return 0;
}

程序将打印质数直至输入数字N(带空格) 例如-N = 9,我的o / p -2 3, 预期o / p-2 3 5 7 帮助

2 个答案:

答案 0 :(得分:0)

每次迭代后仅初始标志= 1

FileSystem.DeleteFile(path_of_the_file,
                        Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
                        Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin,
                        Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException);

答案 1 :(得分:0)

您至少有两个问题:

  1. 您永远不会将flag重置为1。因此,一旦找到非素数,一切都是非素数。您希望每次在外循环中将其设置回1
  2. 您无条件地跳出了内循环(j只是2以外的任何内容),因此您实际上是在测试“是奇数”而不是“是素数”。只有break如果您确认它不是素数。

解决此问题,代码将起作用:

#include<iostream>
using namespace std;
int main() {
     int N;
     cin>>N;
     for(int i=2;i<=N;i++){
         int flag=1; // Set each loop
         for(int j=2;j<i;j++){
             if(i%j==0){
                 flag=0;
                 break; // Only break when confirmed composite
             }
             // no break otherwise
         }
         if(flag==1){
             cout<<i<<" ";
         }
     }
     return 0;
}

Try it online!