埃拉托色尼筛选法 算法
来源:互联网 发布:图片尺寸编辑软件 编辑:程序博客网 时间:2024/05/17 06:42
埃拉托色尼筛选法
埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。是针对自然数列中的自然数而实施的,用于求一定范围内的质数,它的容斥原理之完备性条件是p=H~
(1)先把1删除(现今数学界1既不是质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)读取队列中当前最小的数5,然后把5的倍数删去
(5)如上所述直到需求的范围内所有的数均删除或读取
注:此处的队列并非数据结构队列,如需保留运算结果,处于存储空间的充分利用以及大量删除操作的实施,建议采用链表的数据结构。
下面是 C 语言实现的
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define SIZE 10000
int main()
{
int i; /*i表示整数和对应的下标*/
int j; /*j表示正要处理的质数j之前的已处理j之后的未处理*/
int k; /*k表示正在处理的j的倍数从2开始到j*k<SIZE*/
int a[SIZE]; /*下标表示整数内容判断是否为质数*/
int *p; /*控制循环*/
for(p = a; p < a+SIZE; ++p) { /*初始化数组全是TRUE*/
*p = TRUE;
}
a[0] = a[1] = FALSE; /*设置前面两个不是质数的数的状态为FALSE*/
i = 2;
while(i < SIZE) { /*找到下一个质数*/
while(a[i++] == TRUE) {
j = i-1;
break;
}
[span]for(k = 2; j*k < SIZE && i < SIZE;++k) { /*处理质数的倍数*/
a[j*k] = FALSE;
}
[span]}
for(p = a; p < a+SIZE; ++p) { /*打印出质数*/
if(*p == TRUE) {
printf("%8d", p-a);
}
}
printf("\n");
return 0;
}
- 埃拉托色尼筛选法 算法
- 埃拉托色尼筛选算法
- 算法---筛选法
- 筛选法求素数算法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法:
- 埃拉托色尼筛选法--JAVA
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法
- 算法分析:用筛选法求质数
- Eratosthenes筛选法求素数的算法
- Eratosthenes筛选法求素数的算法
- 筛选法求素数算法详解
- 算法与数据结构-筛选法求素数
- 每日一算法:筛选法求素数
- 筛选法求素数算法详解
- penStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(1)
- 是不是这样的呢
- 560亿PV+7.3亿用户,Reddit是如何做到的?
- ruby 数组指定方式排序
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(2)
- 埃拉托色尼筛选法 算法
- SRM Rfx(寻源)的含义及相应的增强
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(3)
- 现在的一切都可以忍
- LATTICE FPGA IO 约束设置 初探
- POJ2112_Optimal Milking(网洛流最大流Dinic+最短路Flody+二分)
- jquery easyui combobox
- 最好用的浏览器
- JavaWeb之Servlet课堂笔记[自己总结的]