模数:未定义整数的用途
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的值。
希望一切顺利。
我无法理解代码中几行的含义。我最近开始学习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的值。
希望一切顺利。