求50到100以内的质数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求50到100以内的质数相关的知识,希望对你有一定的参考价值。
VB编程 谢谢
错了 错了 用 C#编写~~~我的失误、、、
100以内的质数共有25个,这些质数我们经常用到,可以用下面的两种办法记住它们。
一、规律记忆法
首先记住2和3,而2和3两个质数的乘积为6。100以内的质数,一般都在6的倍数前、后的位置上。如5、7、11、13、19、23、29、31、37、41、43……只有25、35、49、55、65、77、85、91、95这几个6的倍数前后位置上的数不是质数,而这几个数都是5或7的倍数。由此可知:100以内6的倍数前、后位置上的两个数,只要不是5或7的倍数,就一定是质数。根据这个特点可以记住100以内的质数。
二、分类记忆法
我们可以把100以内的质数分为五类记忆。
第一类:20以内的质数,共8个:2、3、5、7、11、13、17、19。
第二类:个位数字是3或9,十位数字相差3的质数,共6个:23、29、53、59、83、89。
第三类:个位数字是1或7,十位数字相差3的质数,共4个:31、37、61、67。
第四类:个位数字是1、3或7,十位数字相差3的质数,共5个:41、43、47、71、73。
第五类:还有2个持数是79和97。 参考技术A 53 59 61 67 71 73 79 83 89 97没了,就这些,真的,不骗你。 参考技术B 53 59 61 67 71 73 79 83 89 97追问
哥哥、我问的是编程,VB编程 程序语言 计算机类别的 谢谢
追答1~100的可以吗?
#include
void main()
int i,k,t=0,sum=0;
int c,a[100];
c=1;
for (i=1;i<=100;i++) /*设定范围100以内*/
for(k=1;k<=i;k++) /*从1查到当前所判断的数*/
if (i%k==0 && k!=1 && i!=k) c=0; /*如果已经不满足素数条件,则将标志转0*/
if (c!=0) a[t]=i;t++; /*如果标志为1,则该质数保存入数组*/
c=1; /*初始化标志*/
for(i=0;i<t;i++)
printf("%d\n",a[i]);
getchar();
参考资料:http://zhidao.baidu.com/question/51148915.html
本回答被提问者采纳 参考技术C 53 59 61 67 71 73 79 83 89 97 参考技术D 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 83 89 93 97求100以内素数的5中基本方法及其优化
求100以内素数的5中基本方法及其优化
方法1 基本做法
错解比较:进入了小循环:有时加pass也可以。
错解:
这里的print也同样注意不要写到循环内。
注释:
1.两种条件运用:为合数。
2.以上错误点。
方法二
注释;1.条件运用,质数除了2都是奇数,因为偶数都能被除了自身外的2整除。改进自1
2.偶数除了2都不是质数。
3.第二个for写的是到开方的奇数。
4.奇数含有质数和非质数。偶数除了2一定不是质数。所以先剥离了偶数。
方法三:使用列表
注释:1.break continue pass
2.质数i依然是从奇数中选。
3.条件应用,一个数如果能被一个素数整除,那它是合数。
4.用列表primenumber[]存储质数作为被除数。
方法四 本做法及优化
1.本做法
注释:
1.利用以前的结果,把之前的质数结果用起来了。得知道一些规律。质数等于质数的乘机
记住一些记好了。冒泡法(算法)记不住,所以换算法。
2.if i>x0.5,即i都大于x0.5依然未被整除(因为未走上一个分支,相当于截胡在这里,而来/走这个分支)。
拿一定是质数。上边一个if相当于判断是否是合数。下边的是在上边的基础上告知你都到x**0.5,依然未被break,
肯定是质数。??两个If与上边for 的关系,是否如上所述:先走上边if循环,如果还未被整除,那么。
测试:发现是一个数值x先走了两个if.相当于一根管子有两个阀门。是直的
测试:
测时间差,看优化性
2.on优化。每次都开方太耗时。放在相应的循环层次上减少循环每次都计算/分摊平方。
方法五 条件:大于3的素数只有6N+1和6N-1两种形式,但反过来不成立。但是比如25(非质数)和23,是这种,但不成立。也即23没有孪生质数。
**推到出其他隐藏情况【除了2,3】
1.6N只表示6的倍数,各个数字的N不尽相同,N相同的情况下互为孪生,N=1比如5 7。
2.排序的话N是一位一位往上加的依次是N=1 5 7 ; N=2 11 13 ....。
3.由此推到出两个相邻的孪生组的相接的两个数的差为4,孪生组之间的差为2(delta=6N+1-6N+1=2)。本体为依次隐藏情况为打码解题条件。(或通过看下边的列举,得出结论,有可能是错误的特别是含有倍数的情况,越往上随着循环还会delta更大如下应该是2,4,2,4,...,2,4,6)
孪生素数即6n+1与6n-1。而其
Range函数只定值一次。相当于不变。所以补偿该此案放在下边。
4.**错误:打印未在else循环内,打印出的必然是未经筛选的
正确:print要在else内,否则无法筛选25等。print要在x +=前,否则累加的25等也会被打印。即非质数的6N+1。
以上是关于求50到100以内的质数的主要内容,如果未能解决你的问题,请参考以下文章