我正在从Bjarne Stroustrup的书中进行练习,该书名为“使用c ++编程原理和实践”。我必须找到用户想要的前n个质数[用户输入5,然后程序会找到前五个质数]。我在此站点上找到了解决方案: http://people.ds.cam.ac.uk/nmm1/C++/Exercises/Chapter_04/ex_15.cpp
bool prime (vector<int> table, int number) {
for (int i = 0; i < table.size(); ++i)
if (number%table[i] == 0) return false;
return true;
}
但是我无法理解素性测试。为什么取模?我对素数进行了自己的测试,尽管它不那么优雅,但更冗长,但对我来说更容易理解。
bool isPrime(int num) {
for (int i = 2; i < num; i++) {
for (int j = 0; j < num; j++) {
if (i*j == num) {
return false;
}
}
}
if (num == 1) {
return false;
}
return true;
}
因此,如果有人可以向我解释该家伙代码,我将非常感激。
答案 0 :(得分:0)
取模运算符返回除法运算的余数。因此,如果表中任何数字的余数等于0,那么我们可以说该数字是可整除的,因此不是素数。另一方面,如果该模对表中的所有数字返回除0以外的任何值,则该数字不能被整除,因此为质数。
https://www.cprogramming.com/tutorial/modulus.html
欢迎使用StackOverflow:)
答案 1 :(得分:0)
这是其他代码,全部包含在内:
#include "std_lib_facilities.h"
bool prime (vector<int> table, int number) {
for (int i = 0; i < table.size(); ++i)
if (number%table[i] == 0) return false;
return true;
}
int main () {
int count, next;
cout << "Input the number of primes\n";
cin >> count;
vector<int> table;
next = 2;
while (table.size() < count) {
if (prime(table,next)) table.push_back(next);
++next;
}
for (int n = 0; n < table.size(); ++n)
cout << table[n] << " ";
cout << endl;
// keep_window_open();
return 0;
}
此代码将向量table
填充到它到目前为止找到的所有素数。从2开始,它将检查该数字是否可被其构造的table
中的任何数字整除。如果不能将其整除,则表示此数字是质数,并将其输入到table
中。
模运算符用于检查可除性。 a%b
返回执行除法a/b
时发生的余数。如果此值为0,则没有余数,我们可以得出结论a可被b整除。