模数:未定义整数的目的

时间:2017-08-23 03:25:03

标签: c++ c++11 modulus

我在理解代码中的几行含义时遇到了一些麻烦。我最近开始学习C ++,并选择了Bjarne Stroustrup的“Programming:Principles and Practice Using C ++”。第4章中有一个问题让我感到沮丧,所以我在网上搜索了一个解决方案。以下是我最终与本书一起使用的代码:

#include "std_lib_facilities.h"

bool prime(vector<int> store, int number) {
    for (int i = 0; i < store.size(); ++i)
    if (number%store[i] == 0) return false; //line that I don't understand
    return true;
}

int main() {

    int max;
    cout << "Please enter a maximum number you want checked for being prime or not.\n";
    cin >> max;
    vector<int> store;
    for (int n = 2; n <= max; ++n)
        if (prime(store, n)) store.push_back(n);
    for (int n = 0; n < store.size(); ++n)
        cout << store[n] << "\n";

    keep_window_open();
    return 0;
}

代码的目标是找到下面的所有素数,并且等于用户输入,从2开始。我理解这段代码中发生的一切,但一行除外(注释标注)。 此行中int“number”的目的是什么,以及数学上发生了什么?令我困惑的方面是“数字”没有值,但它除以当前元素的值。如果它等于零,那么理论上该语句是错误的。有人可以向我解释一下吗?它与查找素数有什么关系?我想知道基本级别发生了什么,这样我才能成为一个更有效的程序员并制定自己的解决方案。感谢。

3 个答案:

答案 0 :(得分:4)

prime的上下文中,store到目前为止的素数小于number

number是一个素数,当且仅当它不能被任何整数(0和1旁边)整除时

答案 1 :(得分:2)

do-while

这里重复调用函数,开头的n值为2 for循环从2开始迭代n。这个n值是函数体中number的值。

希望清除。

答案 2 :(得分:1)

  

令我困惑的方面是“数字”没有值

number确实有一个值:调用prime()时传递的值。在main()中,首先调用prime(),数字= 2,然后数字= 3,...最多数字=最大。

其他答案已经解决了该计划背后的数学reasoning

如果你想了解这个程序是如何工作的 - 并且在调用number期间检查prime()的值以及调用堆栈是一个很好的方法 - 我会建议学习如何使用调试器,如gdb和poking。