筛选法求质数

今天学到一个求质数简单易懂的算法,效率也很高的求职质数算法,开一个数组,从前往后遍历,如果没有被标记证明是质数,没错找到一个质数就被该质数的倍数标记排除,最后得到的数组就是质数了,代码如下

#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] << " ";
	}
}
posted @ 2024-05-05 00:00  韩熙隐ario  阅读(27)  评论(0)    收藏  举报