问题说:
您会得到一个整数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;
}
答案 0 :(得分:-1)
首先为将来参考,您可能应该将其发布在代码审查中,除非存在特定问题,然后应创建一个Minimal, Complete, and Verifiable post。
除了您不检查N> 0可能导致无限循环外,没有其他任何内在的错误,j应该是i而不是N,我认为这会将1打印为素数,而不是。这里有一些指针:
为什么要从N变为0?与从2到N相比,这似乎有点反常(您可以跳过1,因为它不是素数)
如果要使用标志(u
),则应将其设为bool
,以强制其为true或false
您不需要标记,而是在找到除数后立即打印数字,然后中断内循环,如
for(j=2; j< N-1; j++){
if(i%j==0){
cout << i << " ";
break;
}
}
您不必让j一直到达i,仅需要sqrt(i),因为任何大于除以i的sqrt(i)的值都必须乘以比sqrt(一世)。因此,如果我不是素数,那么sqrt(i)下必须有一个除数