筛选法求质数(注解)
来源:互联网 发布:淘宝添加客服怎么登陆 编辑:程序博客网 时间:2024/04/29 11:23
http://www.cnblogs.com/guoxiaocong/archive/2005/12/27/305611.html
由于一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。例如要查找100以内的质数,首先2是质数,把2的倍数去掉;此时3没有被去掉,可认为是质数,所以把3的倍数去掉;再到5,再到7,7之后呢,因为8,9,10刚才都被去掉了,而100以内的任意合数肯定都有一个因子小于10(100的开方),所以,去掉,2,3,5,7的倍数后剩下的都是质数了。
用程序可以这样解决,引入布尔类型数组a[i],如果i是质数,a[i]=true,否则a[i]=false。那么划掉i可以表示成a[i]=false。
//找出n以内质数void Sieve(int n){ bool[] a = new bool[n+1]; for (int i = 2; i <= n; i++) a[i] = true; for (int i = 2; i <= Math.Sqrt(n); i++) {// 100以内的任意合数肯定都有一个因子小于10, 11的倍数就没有必要求出再筛掉,因为它的1-9倍(质因子2,3,5,7)在2,3,5,7的倍数中都求过了 if (a[i]) for (int j = i; j*i <= n; j++) a[j * i] = false;// 求i=2,3,5,7各数的倍数时,从j=i倍开始求,比如7,求它的7倍,8倍,9倍等,因为2到6倍(乘数因子中2到6)的质因子(2,3,5)都包含在前面求的2,3,5的倍数中,所以可以略过. } for (int i = 0; i <= n; i+=2) { if (a[i]) Console.Write("{0},",i.ToString()); }}
- 筛选法求质数(注解)
- 筛选法求质数
- 用筛选法求质数
- PHP筛选法求质数。
- 用筛选法求质数
- 算法分析:用筛选法求质数
- 筛选法求质数(素数)
- 数组下标筛选法求质数
- 求质数:筛选法(埃拉托色尼筛法)
- 筛选法求质数(acm)
- Eratosthenes筛选求质数
- 筛选求质数
- 求质数的筛选算法
- 求质数中的筛选思想
- (7)筛选求质数
- 14 Eratosthenes 筛选求质数
- Algorithm Gossip: 筛选求质数
- 求质数(分别用开根号法、筛选法求质数)
- 第一时间---Windows 7 with SP1中英文原版MSDN下载汇总---原汁原味
- java的object重写equals时为什么有必要重写hashcode
- 教你如何选专业书籍 .
- android Theme & Style
- 数字电视节目码流中的PMT表分析
- 筛选法求质数(注解)
- 获得日期(今日、近三天、本周、最近6个月)
- 英语练习43 Going Camping
- Java Date类 详解
- 数据库锁表的分析与解决
- 探讨:大型视频监控平台的出路
- win7下ftp服务器配置方法
- ORA-01591: lock held by in-doubt distributed transaction
- AD TCL549