我正在尝试学习如何编码,而我正在努力学习我的代码有什么问题。我正在使用C ++中的Visual Studio 2013进行编程。
问题:编写程序以从用户读取数字N,然后找到第一个N素数。素数是一个只有两个除数的数字,一个和它本身。
不是我的代码打印出一系列素数,而是重复一些素数。
#include <iostream>
using namespace std;
// this program will calculate the first N primes
int main(){
int N;
cin >> N;
for (int i = 2; i < N; i++){
for (int j = 2; j < N; j++){
if (i%j == 0){
break;
}
else
cout << i << " " << "is a prime number\n";
}
}
}
答案 0 :(得分:1)
每当j
没有划分i
时,您就会打印出i
为素数。你应该等到你检查所有可能的除数。我不会给你答案你应该做什么,但它应该涉及修改你的代码的这一部分:
if (i%j == 0){
break;
}
else
cout << i << " " << "is a prime number\n";
}
答案 1 :(得分:0)
代码中的错误:
i
而不是N
<强>优化强>
只需检查sqrt(Number)
以检查其是否为素数而不是数字-1。
#include <iostream>
using namespace std;
// this program will calculate the first N primes
int main(){
int N;
cin >> N;
for (int i = 2; i < N; i++){
int f=0;
for (int j = 2; j*j <= (i); j++){
if (i%j == 0){
f=1;
break;
}
}
if(!f) Cout<<i<<"is prime"<<endl;
}
}