确定素数

时间:2018-12-13 16:35:25

标签: c++

我正在从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;
}

因此,如果有人可以向我解释该家伙代码,我将非常感激。

2 个答案:

答案 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整除。