素数筛选法
2018-03-12 21:03
260 查看
剔除2 3 4 5 6 … … 的倍数
就像2是素数,所有是2的倍数的肯定都不是素数,这时候标记上,接着判断3是素数,所有是3的倍数的都肯定不是素数,这时就要标记上,以此下去,执行到根下(总数),这样就会得到一个素数表,所有没有被标记的都是素数,下面是具体的代码实现,代码里面有注释。写的很清楚。
就像2是素数,所有是2的倍数的肯定都不是素数,这时候标记上,接着判断3是素数,所有是3的倍数的都肯定不是素数,这时就要标记上,以此下去,执行到根下(总数),这样就会得到一个素数表,所有没有被标记的都是素数,下面是具体的代码实现,代码里面有注释。写的很清楚。
#include <iostream> #include <string.h> #include <cstdio> #include <algorithm> using namespace std; #include <bits/stdc++.h> const int maxn = 1003; int a[maxn]; void prime() { int i,j; for(i=2;i * i <= maxn;i++) //筛选循环 i*i<=manx 和i<=sqrt(maxn) 效果一样 for(j=2;j<=maxn/i;j++) //最大筛选的数字为maxn 执行maxn/i次 a[j*i]=1; } int main() { int n; memset(a,0,sizeof(a)); //初始标记为0,代表都为素数 prime(); //筛选 scanf("%d",&n); for (int i=2; i<=n; i++) { if (a[i]==0) printf ("%d\n",i); } return 0; }
相关文章推荐
- Poj2689【素数筛选】
- 【转载】三种素数筛选法详解
- 筛选素数的几种方法
- 素数筛选的模板
- 筛选法快速查找素数
- CSU素数槽 判断多个素数怎么不超时(素数筛选)
- 素数筛选及优化
- 筛选法求素数
- 素数筛选法
- 素数筛选模板
- 2017 Multi-University Training Contest - Team 4 :Counting Divisors(数论:素数筛选+分解质因子+求因子数)
- 小于等于n的素数的个数(埃式筛选法和欧拉筛选)
- 算法之――素数之筛选法
- 筛选法求素数_2
- 素数的筛选找法
- 我的素数筛选法
- 素数筛选法
- UVa 1644 - Prime Gap(筛选求素数)
- 线性筛选素数
- 快速线性素数筛选[模板]