C程序求素数详解

C程序求素数详解

ID:38269915

大小:119.33 KB

页数:5页

时间:2019-05-29

C程序求素数详解_第1页
C程序求素数详解_第2页
C程序求素数详解_第3页
C程序求素数详解_第4页
C程序求素数详解_第5页
资源描述:

《C程序求素数详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ByjuzhongEmail:ziou2004@163.com2015年1月25日C程序求素数详解用C语言编程求解1亿以内所有素数的原理与实现1.原理与证明我们知道,大于1的自然数,可以划分为素数p和非素数!p。假若给出一个大于1的自然数,如果它不是“非素数”,那么可以肯定它是“素数”,非此即彼嘛!为了记叙方便,以下所述,遇到“自然数”或“整数”,均指大于1的整数。素数也叫质数,但在将一个整数分解为质因子乘积时,通常称为质数,所以以下所述,有时叫素数,有时叫质数,都是同一种东西,只不过在不同环境下,称谓不同。我们又知道:一个非素数可以分解为至少两个质

2、数的乘积。而素数不能。!P=p1*p2*…P!=p1*p2既然,一个非素数N能分解为至少两个质数的乘积,那么每个质因数一定比这个非素数小(显而易见!)。(p1

3、性3:一定存在小于或等于这个非素数平方根的素数p,可以整除这个非素数。因为非素数能分解为至少两个质数的乘积,其中的必有一个质数一定不大于√!P,这个是显而易见的。!P=p1*p2*…(p1<=√!P

4、

5、p2<=√!P

6、

7、…)=1由上面所述,我们可以根据是否具备上述属性之一,来判断一个整数是否为素数。C语言编程,枚举1亿范围内的所有整数,逐个判断是否为素数。2.C语言实现a.较慢的方法:根据属性2,判断一个整数是否为素数,我们可以将这个整数,对比他小的所有整数求余,如果发现有结果为0的,可以判断它为非素数。如果都没发现结果为0,可以断定它是素数。#in

8、clude#include#includeintmain(void){intlimit=0;start:printf("请输入上限数(输入0退出):");scanf("%d",&limit);if(limit<0

9、

10、limit>100000000){printf("请输入大于1且不大于100000000的自然数");gotostart;}if(limit==0)return0;intmaxp=0;//用来保存最大的素数intcount=1;//用来保存素数个数//freopen("out.txt"

11、,"w+",stdout);//如果结果需输出到文件,请去掉注释printf("2t");clock_tstart,end;//用来计算程序耗时的start=clock();for(inti=2;i<=limit;i++){for(intt=2;t

12、是:%d,最大的素数是%d",limit,(double)(end-start)/CLOCKS_PER_SEC,count,maxp);gotostart;}!2b.较快的方法:根据属性3,利用开方将要测试的求余的最多个数大幅减少,例如要测试1亿是否是素数,则最多测试10000个小于10000的整数。#include#include#includeintmain(void){intlimit=0;start:printf("请输入上限数(输入0退出):");scanf("%d",&limit);i

13、f(limit<0

14、

15、limit>100000000){printf("请输入大于1且不大于100000000的自然数");gotostart;}if(limit==0)return0;intmaxp=0;//用来保存最大的素数intcount=2;//用来保存素数个数//freopen("out.txt","w+",stdout);//如果结果需输出到文件,请去掉注释printf("2t3t");clock_tstart,end;//用来计算程序耗时的start=clock();for(inti=4;i<=limit;i++){intss=

16、(int)sqrt(i);for(intt=2;t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。