我的任务是创建一个输出前N个素数的程序。用户输入值N。这是我当前的程序。它的格式可能看起来很奇怪,但我不知道如何解决。很容易看到发生了什么。
#include <iostream>
using namespace std;
int main() {
cout << "How many prime numbers?";
int N;
cin >> N;
if(N=1){
cout << "2";
}
if(N>1){
cout << "2" << "\n";
int i=N-1; //i=prime counters
int j=3; //j=test prime
do {
int k;
for(k=2; k<j;){ //divisibility test
if(j%k!=0 and k!=j-1){ //indivisible, check next divisor
k=k+1;
continue;
}
if(j%k!=0 and k==j-1){ //indivisible and last divisor, display prime
cout << j << "\n";
i=i-1 //removes a prime counter
break;
}
if(j%k==0){ // divisible, break from loop
break;
}
}
j=j+1; //test next prime
} while(i>0); //will not continue printing primes if number has exceeded N
}
return 0;
}
无论如何程序都会输出“ 2”。然后,它测试每个数字与除1之前的每个数字的可除性。如果它是不可分割的并且仍然有除数可以通过,则继续。如果它是不可分割的并且不再有除数,则将其打印出来,并取出一个“质数计数器”。如果可以将其整除,则该循环将中断,并继续测试下一个数字。当素数计数器达到0时,do while循环结束,程序完成。
当程序输出以下内容时,我遇到了问题:
多少个质数? 2
我不知道为什么会这样,因为我将N指定为整数并要求用户输入N。它甚至没有给我输入N的机会,它只是自动打印“ 2”。到底是怎么回事?
答案 0 :(得分:2)
您的代码中有一些基本错误。您可以在以下位置查看工作版本
http://coliru.stacked-crooked.com/a/3e6ab22ca6e15b00
您遇到的主要错误是
if(N=1){
cout << "2";
}
你打算写
if(N==1){
cout << "2";
}
请注意,相等性检查使用==
,赋值使用=
。任何体面的编译器都会告诉您您使用的是错误的。例如,您应该在编译器输出上看到警告,例如
main.cpp: In function 'int main()':
main.cpp:8:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if(N=1){
~^~
但是总的来说,代码可以工作。
#include <iostream>
using namespace std;
int main() {
int N = 10;
if(N=1){
cout << "2";
}
if(N>1){
cout << "2" << "\n";
int i=N-1; //i=prime counters
int j=3; //j=test prime
do {
int k;
for(k=2; k<j;){ //divisibility test
if(j%k!=0 and k!=j-1){ //indivisible, check next divisor
k=k+1;
continue;
}
if(j%k!=0 and k==j-1){ //indivisible and last divisor, display prime
cout << j << "\n";
i=i-1; //removes a prime counter
break;
}
if(j%k==0){ // divisible, break from loop
break;
}
}
j=j+1; //test next prime
} while(i>0); //will not continue printing primes if number has exceeded N
}
return 0;
}
输出为
2
3
5
7
11
13
17
19
23
29
您可能还想更改代码以删除
using namespace std;
通常被认为是坏习惯。更多信息here