вывести простое число до числа N - PullRequest
0 голосов
/ 19 января 2019
#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 с разделенным пробелом ex - N = 9, my o / p -2 3, ожидаемое o / p - 2 3 5 7 help

Ответы [ 2 ]

0 голосов
/ 19 января 2019

У вас есть как минимум два вопроса:

  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;
}

Попробуйте онлайн!

0 голосов
/ 19 января 2019

Просто начальный флаг = 1 после каждой итерации

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