繁体   English   中英

模:未定义整数的目的

[英]Modulo: The Purpose of An Undefined Integer

我在理解几行代码中的含义时遇到了一些麻烦。 我最近开始学习C ++,并学习了Bjarne Stroustrup的“编程:使用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的用户输入以下的质数,从2开始。我理解此代码中发生的所有事情,除了一行(用注释表示)外。 此行上的int“数字”的目的是什么?在数学上这是怎么回事? 令我感到困惑的方面是“数字”没有值,但是它被当前元素的值所除。 如果等于零,则理论上该语句为假。 有人可以向我解释一下吗? 找到素数有什么关系? 我想了解基本情况,以便成为一名更有效率的程序员并制定自己的解决方案。 谢谢。

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

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

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

这里,该函数被重复调用,并且因为for循环从2开始迭代n,所以n的值在开始处为2。n的值是函数主体中number的值。

希望清除。

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

number确实有一个值:在对prime()的调用中传递了什么值。 main()prime()首先以number = 2调用,然后以number = 3调用,一直到number = max。

其他答案已经解决了该程序背后的数学推理

如果您想了解该程序的工作原理,并且在调用prime()以及调用堆栈期间检查number的值是实现此目的的好方法-我建议您学习如何使用调试器,例如GDB和戳。

暂无
暂无

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

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