[英]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.