我在理解代码中的几行含义时遇到了一些麻烦。我最近开始学习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”的目的是什么,以及数学上发生了什么?令我困惑的方面是“数字”没有值,但它除以当前元素的值。如果它等于零,那么理论上该语句是错误的。有人可以向我解释一下吗?它与查找素数有什么关系?我想知道基本级别发生了什么,这样我才能成为一个更有效的程序员并制定自己的解决方案。感谢。
答案 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。