埃拉托色尼筛选法
来源:互联网 发布:unity3d瀑布 编辑:程序博客网 时间:2024/06/07 00:14
埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。
用于求一定范围内的质数.
步骤:
(1)先把1删除(现今数学界1既不是质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)读取队列中当前最小的数5,然后把5的倍数删去
(5)如上所述直到需求的范围内所有的数均删除或读取
对于每个素数k,算法将primes[k*i]设置为false。
在for循环中执行了n/k-k+1次
因此,时间复杂度
T(n)=n/2-2+1+n/3-3+1+n/5-5+1..... =O(n/2+n/3+n/5+.....) <O(nπ(n)) =O(n*根号n/logn)
ps:π(n)表示小于或等于n的素数的个数;
这里的上限时间复杂度是非常松散的,实际的时间复杂度比它好很多。
Java实现:
import java.util.Scanner;public class SieveOfEratosthenes{ public static void main(String[] args){ Scanner input=new Scanner(System.in); System.out.print("Find all prime numbers <= n, enter n: "); int n=input.nextInt(); boolean[] primes=new boolean[n+1]; for(int i=0;i<primes.length;i++){ primes[i]=true; } /** *k=2 i=2...n/2; *k=3 i=3...n/3; *... *保证k*i<=n **/ for(int k=2;k<=n/k;k++){ if(primes[k]){ for(int i=k;i<=n/k;i++){ primes[k*i]=false; } } } int count=0; for(int i=2;i<primes.length;i++){ if(primes[i]){ count++; if(count%10==0) System.out.printf("%7d\n",i); else System.out.printf("%7d",i); } } System.out.println("\n"+count+" primes less than or equal to "+n); }}
阅读全文
0 0
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法 算法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法:
- 埃拉托色尼筛选法--JAVA
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法
- 埃拉托色尼筛选法求素数
- 埃拉托色尼筛选法求素数
- 埃拉托色尼筛选法python实现
- 埃拉托色尼筛选法求素数
- 埃拉托色尼筛选法-求素数
- 筛选法
- 筛选法
- 筛选法
- 筛选法
- 筛选法
- centos7.3下配置网卡重启出错
- urlencode与 rowurlencode区别
- SIT与UAT的分别
- vue使用v-for渲染列表属性需要:="items.attribute"绑定
- Jfinal(三)--------Model的增删改查
- 埃拉托色尼筛选法
- Java的replaceAll()方法
- LabVIEW 严格类型VI
- 欢迎使用CSDN-markdown编辑器
- Android Studio如何安装插件
- CSU 1757 火车进站 1757
- 图解Linux命令之--tcpdump命令
- 欢迎使用CSDN-markdown编辑器
- E