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 打印为素数,它不是。这里有一些建议:
你为什么要从 N 到 0?与从 2 到 N 相比,这似乎有点违反直觉(你可以跳过 1,因为它不是质数)
如果您要使用标志 (u
),那么您应该将其设置为 bool
,这会强制它为真或假
你不需要做一个标志,而是一旦你找到一个除数打印数字然后像
一样打破内循环
for(j=2; j< N-1; j++){
if(i%j==0){
cout << i << " ";
break;
}
}
你不需要让 j 一直到 i,只需要 sqrt(i) 因为任何大于 sqrt(i) 的东西都必须乘以一些更小的数然后是 sqrt(i)。所以如果 i 不是质数,那么 sqrt(i)
下面一定有一个除数
问题说:
给你一个整数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 打印为素数,它不是。这里有一些建议:
你为什么要从 N 到 0?与从 2 到 N 相比,这似乎有点违反直觉(你可以跳过 1,因为它不是质数)
如果您要使用标志 (
u
),那么您应该将其设置为bool
,这会强制它为真或假你不需要做一个标志,而是一旦你找到一个除数打印数字然后像
一样打破内循环for(j=2; j< N-1; j++){ if(i%j==0){ cout << i << " "; break; } }
你不需要让 j 一直到 i,只需要 sqrt(i) 因为任何大于 sqrt(i) 的东西都必须乘以一些更小的数然后是 sqrt(i)。所以如果 i 不是质数,那么 sqrt(i)
下面一定有一个除数