模数:未定义整数的用途

Modulo: The Purpose of An Undefined Integer

我无法理解代码中几行的含义。我最近开始学习C++,拿起了Bjarne Stroustrup的 "Programming: Principles and Practice Using C++." 第四章有一个问题让我很困惑,所以我在网上搜索了一个解决方案来参考。这是我最终与本书结合使用的代码:

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

代码的 objective 是从 2 开始查找小于等于用户输入的所有质数。我理解这段代码中发生的所有事情,除了一行(注释通过评论)。 这一行的 int "number" 的目的是什么,这里的数学原理是什么? 让我困惑的是 "number" 没有t 有一个值,但它被当前元素的值除。如果它等于零,那么理论上该陈述是错误的。有人可以向我解释一下吗?它与寻找质数有什么关系?我想知道在基本层面上发生了什么,这样我就可以成为一个更有效率的程序员并制定我自己的解决方案。谢谢

prime 的上下文中,store 目前有小于 number 的素数。

number 是质数当且仅当它不能被任何小于它的整数(除了 0 和 1)整除

The aspect of it that is confusing me is "number" doesn't have a value

number 确实有一个值:调用 prime() 时传递的任何值。在 main() 中,首先使用 number=2 调用 prime(),然后调用 number=3,...直到 number=max.

其他答案已经解决了程序背后的数学问题 reasoning

如果你想了解这个程序是如何工作的——在调用 prime() 期间检查 number 的值以及调用堆栈是一个很好的方法——我建议学习如何使用 gdb 等调试器并四处探索。

for (int n = 2; n <= max; ++n)
    if (prime(store, n)) store.push_back(n);

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

希望一切顺利。