质数推算法
‘壹’ 找出1-100之间的质数,该怎么设计算法
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。
� 一种简便的试商方法
� 试商是计算除数是三位数除法的关键,当除数接近整百数时,可以用“四舍五入法”来试商,然而当除数十位上是4、5、6不接近整百数时,试商就比较困难,有时需要多次调商。为了帮助同学们解决这个困难,下面介绍一种简便的试商方法。
� 当除数十位上是4时,舍去尾数看做整百数。用整百数做除数得出的商减1后去试商。
� 命名如1944÷243,除数十位上是4,把243看做200,1944÷200商9,用8(9-1)去试商正合适。
� 当除数十位上是5、6时,舍去尾数向百位进1,把除数看做整百数,用整百数做除数得出的商加1后去试商。
� 例如:1524÷254除数十位上是5,把254看做300,1524÷300商5,用6(5+1)去试商正合适。
� 运用上面这种试商方法,有的可以直接得出准确商,有的只需调商一次就行了。同学们不试在计算除法时试一试。
c++:输出1~100的质数
#include<iostream>
using namespace std;
int main()
{
int i, j;
for(i=1;i<=100;i++) {
for(j=2;j<i;j++)
if(i!=j&&i%j==0)
break;
if(i == j) cout<<i<<endl;
}
system("pause");
}
‘贰’ 寻找质数的算法
没有什么好的办法,如果用程序,就计算n除以2到根号n最接近的整数,如果都不能整除,n就是质数
比如101,要计算19除以2,3,4,5直到10,如果都不能整除,就是质数.
如果你要手动计算,就挨个写,2,3,5,7,11,13,如果数字足够大,不需要像程序一样挨个除,只需要除以比它小的质数就可以了.
‘叁’ 1)设计一个算法,判断7是否为质数. (2)设计一个算法,判断35是否为质数.
算法分析:(1)根据质数的定义,可以这样判断:依次用2—6除7,如果它们中有一个能整除7,则7不是质数,否则7是质数.
算法如下:(1)第一步,用2除7,得到余数1.因为余数不为0,所以2不能整除7. 第二步,用3除7,得到余数1.因为余数不为0,所以3不能整除7. 第三步,用4除7,得到余数3.因为余数不为0,所以4不能整除7. 第四步,用5除7,得到余数2.因为余数不为0,所以5不能整除7. 第五步,用6除7,得到余数1.因为余数不为0,所以6不能整除7.因此,7是质数. (2)类似地,可写出“判断35是否为质数”的算法:第一步,用2除35,得到余数1.因为余数不为0,所以2不能整除35. 第二步,用3除35,得到余数2.因为余数不为0,所以3不能整除35. 第三步,用4除35,得到余数3.因为余数不为0,所以4不能整除35. 第四步,用5除35,得到余数0.因为余数为0,所以5能整除35.因此,35不是质数. 点评:上述算法有很大的局限性,用上述算法判断35是否为质数还可以,如果判断1997是否为质数就麻烦了,因此,我们需要寻找普适性的算法步骤. 热点内容
|