筛选法求质数
今天学到一个求质数简单易懂的算法,效率也很高的求职质数算法,开一个数组,从前往后遍历,如果没有被标记证明是质数,没错找到一个质数就被该质数的倍数标记排除,最后得到的数组就是质数了,代码如下
#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] << " ";
}
}
本文作者:ario
本文链接:https://www.cnblogs.com/arioya/p/18173016
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步