繁体   English   中英

质数计算器C ++

[英]Prime number calculator C++

我一直在尝试编写一个程序,以打印出最多为N的素数。

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

if (modulo == 0) break;

尽管读到“中断”只会结束嵌套循环,而不会同时结束两者,但我认为这是唯一可能出错的事情。 当我将其替换为“ continue”时,程序会打印出从N到0的所有整数,因此如果我输入N = 20,则输出为20、19、18,... 3、2

代码的相关部分如下,对于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;

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

假设输入为20 然后

第一次迭代:

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

第二次迭代:

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

依此类推...您应该做的第一件事是查找Sieve of Eratosthenes

对于您的程序,如何进行处理( 说明 ):

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 << " ";
        }
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM