求100以内的所有素数.docx

上传人:lao****ou 文档编号:380642 上传时间:2023-10-13 格式:DOCX 页数:7 大小:19.42KB
下载 相关 举报
求100以内的所有素数.docx_第1页
第1页 / 共7页
求100以内的所有素数.docx_第2页
第2页 / 共7页
求100以内的所有素数.docx_第3页
第3页 / 共7页
求100以内的所有素数.docx_第4页
第4页 / 共7页
求100以内的所有素数.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《求100以内的所有素数.docx》由会员分享,可在线阅读,更多相关《求100以内的所有素数.docx(7页珍藏版)》请在第一文库网上搜索。

1、求IOO以内的所有素数什么是素数?除。和1以外,只有1和它本身这两个因数的数是素数。如2,3,5,第一种方法:我们很容易找到110里面的素数:2,3,5,7o凡不是这4个数的倍数的数都为素数。pub1icc1assPrimeDemopub1icstaticvoidmain(Stringargs)primeNumber();)pub1icstaticvoidprimeNumber()intcount=4;StringBui1dersb-newStringBui1derO;sb.append(2+3+5+7+);for(inti=10;i=100;i+)if(i%2=0i%3=0i%5=0i%7=

2、0)continue;e1sesb.append(i+zz);count+;System,out.printin(count);System,out.print1n(sb.toString();)第二种方法:根据素数的定义:只有1和它本身这两个因数的数称为素数。可以理解为,一个数(n),只要不能被2,(n-1)之间的数整除,那它就是一个素数。以Sqrt为分界点的原因:首先,因数是成对出现的。比如24,你找到个约数3,那么一定有个约数8,因为24/3=8。然后,这对约数必须一个在根号n之前,一个在根号n之后。因为都在根号n之前的话,乘积一定小于n(根号nX根号n=n)。同样,都在根号n之后的话,

3、乘积一定大于n。所以,如果你在根号n之前都找不到因数的话,那么根号n之后就不会有了。/ZprimeNumberO;primeNumber2();根据素数的定义找素数pub1icstaticvoidprimeNumber()intcount=O;inti;intj;for(i=2;i=100;i+)for(j=2;j=i)count+;System,out.print(i+,z);)System,out.print1n();System,out.printin(count);=优化* 外层循环代表被除数。由于1既不是质数也不是合数,所以从2开始* 内层循环代表除数。* */pub1icstati

4、cvoidprimeNumber2()intcount=0;StringBui1dersb-newStringBui1derO;for(inti=2;i=100;i+)intj;intk=(int)Math.sqrt(i);for(j=2;jk)count+;sb.append(iz,);System,out.printin(count);System,out.printin(sb.toString();)第三种方法:除2以外的所有偶数都不是素数,因此可以筛选一半元素,剩下的数都为奇数。外层循环可筛选掉一半被除数。奇数二奇数*奇数,它不可能被一个偶数整除。内层循环可筛选掉一般除数。pub1ic

5、staticvoidisPrime()2也为素数StringBuiIderSb=newStringBui1der(z,2);intcount=1;记录素数的个数。已经有2这个素数了,所以CoUnt的初始值为1for(inti=3;i=100;i+=2)从3开始,以2为步长,限定每个被除数都是奇数intj;boo1eanf1ag=truc;f1ag为true时,是素数;为fa1se时,是和数for(j=3;ji;j+=2)j从3开始,以2为步长,限定每个除数都是奇数。因为一个奇数是不可能被一个偶数整除的if(i%j=O)如果i能够被j整除f1ag=fa1se;)if(f1ag)count+;sb

6、.append(i+zz);)System,out.printin(count);System,out.print1n(sb.toString();)第四种方法(埃拉托斯特尼筛法):具体步骤:1 .先将1删去(因为1不是素数)。2 .用2去除它后面的各个数,把能被2整除的数删掉,即把2的倍数删掉。3 .用3去除它后面的各数,把3的倍数删掉。4 .分别用5,7各数作为除数去除这些数以后的各数。5 .一直到Sqrt(i)为止。然后重复上述步骤。上述操作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的倍数大于1的全部置0,3的倍数大于1的全部置0,4的倍数大于1的全部置0一直到这个数据

7、集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找。pub1icstaticvoidisPrime()默认值为0,0素数;1合数这里写101是因为数组的下标是从0开始的,而要求的是1100之间的素数intarr=newint101;0,1都不是素数,标记为1arr0=1;arr1=1;/*求1100之间的素数,把2的倍数过滤掉,3的倍数过滤掉,5的倍数过滤掉,7的倍数过滤掉,一直到Sqrt(IOo)的倍数过虑掉(这*些都是2Sqrt(IOO)之间的素数的倍数)*/for(inti=0;i=Math.sqrt(100);i+)if(arri=0)/for(intj=2*i;j=100;j+=i)可以从2*i修改成i*i,因为在前面的循环中从2(A1)的倍数都已经验证过for(intj=i*i;j=100;j+=i)arrj=1;)intcount=0;for(intx=0;x=100;x+)if(arrx=0)count+;System,out.print(x+z,);)System,out.print1n();System,out.printin(count);欢迎大家给我建议,若诸位还有好的方法,欢迎一起交流。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服