素数计算器C ++

时间:2014-09-25 00:16:18

标签: c++ loops primes nested-loops break

我一直试图编写一个程序来打印出素数值为N的数字。

运行程序时,系统会提示我按预期输入N值,但是当我按回车键时,程序结束。我认为问题可能在于break语句:

if (modulo == 0) break;

尽管读到了“打破&#39;将只结束嵌套循环而不是两者,我认为它是唯一可能出错的东西。当我用&#39; continue&#39;替换它时,程序打印出从N到0的所有整数,所以如果输入N = 20,则输出为20,19,18,...,3,< / p>

代码的相关部分如下,非常感谢任何有关C ++新手的帮助/建议。

int N, f;
float modulo;

cout << "Welcome to the prime number sieve\n";
cout << "Enter the number up to which the prime numbers will be printed: ";
cin >> N;

for (int j = N; j != 1; j--) {              
    f = j;

    for (f; f != 0; f--) {
       modulo = j%f;
        if (f == 1) {
            cout << j << ", ";
        }   
        if (modulo == 0) break;
        }                                         

}

  return 0;

1 个答案:

答案 0 :(得分:1)

你算法错了。无论数字是多少,第二个循环的中断都会立即发生。

假设输入为20。然后

第一次迭代:

j = 20
f = j = 20
modulo = 20 % 20 = 0
break

第二次迭代:

j = 19
f = j = 19
modulo = 19 % 19 = 0
break

依此类推......你要做的第一件事就是查找Sieve of Eratosthenes

对于您的计划,该怎么回事(Explanation):

for (int j=2; j < N; j++) {
    for (int f = 2; f*f <= j; f++) {
        if (j % f == 0) {
            break;
        }
        else if (f+1 > sqrt(j)) {
            cout << j << " ";
        }
    }   
}