线性O(N)时间复杂度求素数 , 筛法
1 /* 2 线性时间求出1-N 的素数 , 时间复杂度为O( N) ; 3 一个合数可以表示成若干个素数的积 4 比如说 i = 6 =2 * 3 , A = p1 * p2 * p3 .. * pn , 其中pi为素数 ,p1最小 , 只筛到p1 * i即可 5 我们只筛 最小的 2 * i 不筛3 * i ; 6 */ 7 #include <stdio.h> 8 #include <memory.h> 9 const int MaxNum = 100000;10 11 12 bool isPrime[MaxNum] ; //数组定义该数字是否为素数 13 int prime[ MaxNum ] ; // 存下素数 14 int total = 0 ; //第几个素数 15 16 void seive( int Max )17 {18 memset( isPrime , true , sizeof( isPrime ));19 memset( prime , 0 , sizeof( prime ));20 isPrime[0 ] = false ;21 isPrime[1] = false ;22 for ( int i = 2 ; i <= Max ; i++ )23 {24 if ( isPrime[i] )25 prime[ ++ total ] = i ;26 for ( int j = 1 ; j <= total && i * prime[j] <= Max ; j++)27 {28 isPrime[ i * prime[j] ] = false ;29 if (!( i % prime[j])) break;30 }31 }32 }33 int main()34 {35 int input;36 seive( MaxNum );37 while ( scanf("%d" , &input ) , input )38 {39 40 printf( "%d" , prime[ input ]);41 }42 return 0 ;43 }
转载于:https://www.cnblogs.com/lzhenf/archive/2011/12/24/2300271.html
线性O(N)时间复杂度求素数 , 筛法相关推荐
- 一般筛法求素数+快速线性筛法求素数
一般筛法求素数+快速线性筛法求素数 标签: 正则表达式算法优化扩展c 2010-08-22 01:28 28738人阅读 评论(8) 收藏 举报 分类: 算法学习资料(5) 版权声明:本文为博主原 ...
- 一般筛法和快速线性筛法求素数 求素数的一点总结
素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功. 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 ..N^(0.5) ,看看能否整除N. 如果需要判断的次数较多,则先用 ...
- 求素数: 一般线性筛法 + 快速线性筛法
From: http://blog.csdn.net/dinosoft/article/details/5829550 素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功. 基本原则就是题目 ...
- 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验
普通的素数判断法 当我们要判断一个数字是否是素数的时候,往往会直接看这个数字模1到这个数字的根号,看有没有等于零的,从而判断这个数字是不是素数,这样做的时间复杂度为O(sqrt(n)) bool is ...
- 素数筛法求素数(线性时间)
摘自:http://blog.csdn.net/once_hnu/article/details/6302283 逆向思维的典型应用! 1)普通方法判断素数:O(n*sqrt(n)) 2)筛法求素数: ...
- 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)
一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法 ...
- 筛法快速求素数——leetcode计数质数
在算法竞赛中经常会遇到求质数的问题,这种题目一般都是要求出一定范围内[0,n]所有的质数或者质数的个数.最直接的思路就是根据质数的定义来判定一个数是不是质数(即一个数不能被除1和它本身外的任何数整除) ...
- 素数筛法(传统普通、朴素筛法、埃式筛法、欧拉筛法(线性筛))
素数筛法(普通.朴素筛法.埃式筛法.欧拉筛法) 1.题目 2.分析 3.代码 传统普通 朴素筛法 朴素筛法(6.14) 埃式筛法 埃式筛法(6.14) 欧拉筛法(线性筛) 欧拉筛法(线性筛 6.14) ...
- 快速求素数表——埃氏筛法与欧拉筛法
快速求素数表--埃氏筛法与欧拉筛法 快速求素数表埃氏筛法与欧拉筛法 埃氏筛法 埃氏筛法原理 埃氏筛法时间复杂度 埃氏筛法代码求出1000000以内的素数并且输出n个素数 欧拉筛法 欧拉筛法原理 欧拉筛 ...
最新文章
- [Python] sys.argv[] 用法
- nysql collation
- ST算法解决RMQ问题
- linux通过I2C地址查看设备名称
- 接口测试学习之json
- 李飞飞最新研究成果!斯坦福正在用算法判断政治倾向
- LBP(Local Binary Patterns)局部二进制模式
- JUnit的优点在于什么地方?和main方法有什么不同?
- custompage.width 不能小数吗_为什么有军人戴眼镜?他们的裸眼视力合格吗?
- 实用win7桌面小工具
- 磁钉导航差速式AGV控制实验
- 织梦dedecms会员设置、互动设置教程
- Lorenzo Von Matterhorn(暴力)(树)
- RabbitMQ:使用Docker构建RabbitMQ高可用负载均衡集群
- 深入理解iOS App的启动过程
- opencv-ios开发笔记11 亮度和色温调节
- laravel sail
- python判断字符是英文字母怎么回事_python判断字符串是否包含字母
- Hive中小表与大表关联(join)的性能分析
- 广西公需科目 当代科学技术前沿知识 考试答案