C++ - 打印质数直到 N

C++ - Printing prime numbers till N

问题说:

给你一个整数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;
}

首先,为了将来参考,您可能应该 post 在代码审查时,除非有特定问题,否则您应该创建一个 Minimal, Complete, and Verifiable post

除了你不检查 N>0 这可能导致无限循环之外,没有什么本质上的错误,j 应该去 i 而不是 N,我认为这会将 1 打印为素数,它不是。这里有一些建议:

  1. 你为什么要从 N 到 0?与从 2 到 N 相比,这似乎有点违反直觉(你可以跳过 1,因为它不是质数)

  2. 如果您要使用标志 (u),那么您应该将其设置为 bool,这会强制它为真或假

  3. 你不需要做一个标志,而是一旦你找到一个除数打印数字然后像

    一样打破内循环
    for(j=2; j< N-1; j++){
       if(i%j==0){
         cout << i << " ";
         break;
        }
     }
    
  4. 你不需要让 j 一直到 i,只需要 sqrt(i) 因为任何大于 sqrt(i) 的东西都必须乘以一些更小的数然后是 sqrt(i)。所以如果 i 不是质数,那么 sqrt(i)

  5. 下面一定有一个除数