C++-打印素数直到N

C++ - Printing prime numbers till N

本文关键字:打印 C++-      更新时间:2023-10-16

问题说:

您将得到一个整数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;
}

首先,为了将来的参考,你可能应该在代码审查时发布它,除非有特定的问题,否则你应该创建一个最小、完整和可验证的帖子。

没有什么本质上的错误,除了你没有检查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(,因为任何大于平方t(i(的东西都必须乘以小于平方t(i(的某个数。所以如果i不是素数,那么在sqrt(i(下面一定有一个除数