【发布时间】:2018-12-20 05:37:41
【问题描述】:
我的任务是创建一个输出前 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”。到底是怎么回事?
【问题讨论】:
-
if(N=1)这会将1分配给N,它不会将N与1进行比较。条件始终为真。请参阅您最喜欢的 C++ 教科书,了解=和==之间的区别 -
完全不相关:您可能会发现质数筛选算法比您当前的方法更快。