C ++-输出素数直到N

时间:2018-07-31 04:56:46

标签: c++ numbers primes

问题说:

您会得到一个整数N。您需要打印所有素数的序列,直到N

我想知道我的代码有什么问题,建议也将有很大帮助。

#include<iostream>
using namespace std;

int  main()
{
    int N;
    cin >> N;  
    int u;

    for(int i = N; i > 0; i--)
    {
        u = 0;
        for(int j = 2; j < N-1; j++)
        {

            if(i % j == 0)
            {
                u = 1;     
            }
        }
        if(u == 0)
        {
            cout << i << " ";
        } 
    }

    return 0;
}

1 个答案:

答案 0 :(得分:-1)

首先为将来参考,您可能应该将其发布在代码审查中,除非存在特定问题,然后应创建一个Minimal, Complete, and Verifiable post

除了您不检查N> 0可能导致无限循环外,没有其他任何内在的错误,j应该是i而不是N,我认为这会将1打印为素数,而不是。这里有一些指针:

  1. 为什么要从N变为0?与从2到N相比,这似乎有点反常(您可以跳过1,因为它不是素数)

  2. 如果要使用标志(u),则应将其设为bool,以强制其为true或false

  3. 您不需要标记,而是在找到除数后立即打印数字,然后中断内循环,如

    for(j=2; j< N-1; j++){
       if(i%j==0){
         cout << i << " ";
         break;
        }
     }
    
  4. 您不必让j一直到达i,仅需要sqrt(i),因为任何大于除以i的sqrt(i)的值都必须乘以比sqrt(一世)。因此,如果我不是素数,那么sqrt(i)下必须有一个除数