今天學到一個求質數簡單易懂的演算法,效率也很高的求職質數演算法,開一個陣列,從前往後遍歷,如果沒有被標記證明是質數,沒錯找到一個質數就被該質數的倍數標記排除,最後得到的陣列就是質數了,程式碼如下
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
const int N = 1e+7;
vector<int> v;
bool st[N];
void getPrimes(int n)
{
for (int i = 2; i <= n; i++) {
if (st[i]) continue;
//如果沒有被標記過就是質數
v.push_back(i);
//將後面的倍數都排除掉
for (int j = i + i; j <= n; j += i) st[j] = true;
}
}
signed main() {
int n;
cin >> n;
//篩到m的平方根即可
getPrimes(n);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
}