8.7 质数表

绘制效果:

几何图霸

学习要点:

学习if()函数、质数判断函数prime()、逻辑运算、条件显隐、参数颜色、附点文本和迭代。

一、筛法绘制100以内质数表

筛法制取质数表可以用于小学数学的教学,理解质数的概念及判断方法。

操作步骤:

0.

质数是只含有1和本身两个因数的正整数。用筛法逐步删除2、3、5、7的倍数(不含自身)得到100以内的质数,要筛去的数先红色显示然后再隐藏。制作时运用附点的文本通过迭代表示各个数,用值控制数的颜色及显示隐藏。

1.

【二维视图】,【个性设置】中改度量值字体的字号为26。【常用-文本标签】工具,输入标题“用筛法求100以内的质数”。拖动到图形区上方,选取文本,修改【颜色】,【编辑-格式-对齐】,文本居中。

2.

新建整数参数i,选取它,添加三个计算式:i+1,(i-1)%10*3-25,10-int((i-1)/10)*2。i表示100个正整数中的第i个,初始值为1,为了迭代,计算下一个i+1。100个数分十行十列显示。第一个显示在左上方,坐标为(-25,10)。第i个数的行与列用求余运算及取整函数得到。比如i=35在第4行第5个列,而第一个数1在1行1列,用int((i-1)/10)计算行增量(确定纵坐标)为3,用求余运算(i-1)%10得到列增量(确定纵坐标)为4。同行相邻数之间距离3个单位,行间距为2个单位。因此两个计算式可以得到数i的显示位置的坐标,依次选取这两个式子,【点】工具添加坐标点A。选取i及点A,【编辑-合并值到点】。

几何图霸

3.

新建参数s,从0到10,表示筛选的各个步骤。选取i和s,添加两个计算式控制合并到A的值i的显隐及颜色:if(No1==1,No2<2,No1==2||No1==3||No1==5||No1==7,1,No2<4||No2<6&&No1%2||No2<8&&No1%2&&No1%3||No2<10&&No1%2&&No1%3&&No1%5||prime(No1),1,0)和if(No1==1,No2<1,No1==2||No1==3||No1==5||No1==7,1,No2<3||No2<5&&No1%2||No2<7&&No1%2&&No1%3||No2<9&&No1%2&&No1%3&&No1%5||prime(No1),1,0)*0.6

几何图霸

这两个函数中运用了if()函数及逻辑运算等,可以查看教程中的有关说明。例如“i%2”计算“i除以2的余数”,i是2的倍数时,余数为0,在逻辑式中,0表示“假”;i不是2的倍数时,余数是1,值非0,表示“真”。同样,“i%3”表示判断“i不是3的倍数”。又如,条件显隐的表达式if(No1==1,No2<2,No1==2||No1==3||No1==5||No1==7,1,...)意思为当i为1时,在s<2时总显示,否则不显示。i为2、3、5、7时,由于是质数,各步中都显示,值为1,...。再如颜色表达式中“No2<7&&No1%2&&No1%3”的意思为“s小于7且i不是2的倍数且i不是3的倍数”。它会把符合条件的数设置为蓝色(值为0.6),反之,2的倍数或3的倍数(由于2、3、5、7在条件语句的前面已经设置,所以这里不含2和3)就会显示为红色(值为0)了,而此时2的倍数(不含2)已经隐藏,所以你会看到3的倍数(不含3)显示为红色。prime(i)函数在i为质数时值为1(真),否则为0(假).

选取式1和合并到A的值i,【条件显隐】,选取式2和合并到A的值i,【参数颜色】。

4.

选取i,【迭代】,i映射到i+1,迭代深度99,不用数据表,只显示合并到A点的值i。隐藏点A,拖动i=0,s=0。

几何图霸

5.

添加自由点B,选取点B,构造平行于y轴上的点C,拖动点C到点B下方。选取B、C,【构造-分点】,4等分点D、E、F。分别选取五点,【插入】MTF文本,内容见效果图。选取s,计算(s+1)/2,选取此式与5条文本,【显示-条件显隐】,显示方式选“入场式”。添加s的动画按钮“初始”,从0到0,快速。再添加s的动画按钮“动画”,从0到10,速度0.02。拖动点B到适当位置,隐藏五点及计算式。点击“动画”按钮,观看效果。

几何图霸

二、万以内质数表

要制作更大范围的质数表,图霸中可以用质数函数prime(x),并且要思考如何提高计算的效率。下图显示效果图的一部分,1229个质数每行30个,41行。

几何图霸

操作步骤:

1.

新建一页,输入标题“万以内质数表”。添加自由点A,控制表的位置。度量A的坐标x(A)、y(A)。添加计算式“2”,并把它组合到点A上,浅蓝色。2是唯一的偶质数,下面在迭代时只要检查奇数就可以了,可以提高效率。

几何图霸

2.

新建整数参数n,从0到5000。新建整数参数m,初始值为3,代表待判断的奇数。计算m+2,表示下一个奇数。新建整数参数k,初始为1,表示当前奇质数的个数。选取m,计算prime(m),m为质数时,它为1,表示真,否则值为0。选取k和x(A),计算第k个质数显示位置的横坐标:k%30*2.8+x(A),每行30个,用求余运算得出在第几列,每个数据列宽2.8,A点坐标决定开始的位置。选取prime(m)、k、y(A),计算第k个质数显示位置的纵坐标:if(prime(m),y(A)-int(k/30),1/0),第行30个,int(k/30)得到行数(从0开始的行号),每行1个单位,从上到下显示,行数越大,纵坐标越小。如果m不是质数,就应该显示,可以设置其纵坐标为一个无效的值,如1/0,或者设置一个较大的值,如100,使其不可见。如果该值有效,点虽然不可见,但程序也要对它对应的点去进行计算,消耗时间。设置1/0,后代对象就不会去显示了,效率稍高些。

几何图霸

选取计算式1、2,【点】工具添加坐标点B,选取参数m和点B,把值组合到点上,设置浅蓝色。隐藏A、B两点。

3.

选取k与prime(m),计算它们的和:k+prime(m)。若m为质数,prime(m)=1,新的个数为k+1;否则,由于prime(m)=0,结果仍为k。仔细思考此式,它是怎样统计质数个数的。选取m和k,【迭代】,m映射到m+2,k映射到k+prime(m),不用数据表,只显示合并到B点的值m。迭代深度设置为n,隐藏计算式,拖动n。添加n的动画,从0到5000,增速为1。

几何图霸

4.

上面的算法中迭代深度接近5000,对每个奇数进行判断,并计算对应的点的坐标,效率不高。拖动n到很大时会感觉有点卡。不是质数就不应去计算点的坐标,如何改进呢?

下面的算法改成只计算质数对应的点。用i表示奇质数的个数,p表示质数,根据i计算点的坐标,p的下一个相邻的质数用循环去计算:for(set(0,p+2),!(prime(get(0))),accum(0,2),get(0))。它判断p+2是否是质数,是就退出循环,返回该值,不是质数(“!”表示逻辑“非”)就再加2,重新判断。由于是表达式运算,不用画点,当数据很大时,它的效率要高得多。还有,在计算点B坐标时用常量(-40,20)代替点A的坐标。迭代或循环体内的一个小小的改进也会明显提高速度。

一万以内的质数有1229个,最后一个是9973。n的范围改为0到1227(已有两个数2和3不用迭代生成),设置n为迭代深度。如果对n添加动画按钮,从0到1227,增速为1,执行时间是前法的十分之一左右(各人电脑不同,有差异)。

几何图霸

当然,绘制质数表不必用按钮显示动画过程,即使设置也能把增速设置为30,每次显示一行。这里只是介绍算法,学习函数的使用。欢迎提出您的更高效的算法,如果不用prime(),又该怎样算?

练习1:对绘制万以内的质数表的算法再改进,更上一层楼!

提示:图霸中有内置变量数组,可以在第1步添加的计算式“2”中用循环先计算前1020个质数,存储到数组中:for(set(1023,1)+set(0,3),get(1023)<1021,(for(accum(0,2),!(prime(get(0))),accum(0,2),set(get(1023),get(0))),accum(1023)),2),在迭代中只要读取这些数,不必重复计算:if(i<1021,get(i),for(set(0,p+2),!(prime(get(0))),accum(0,2),get(0))).

练习2:制作“利用随机数表法进行简单随机抽样”的课件:

几何图霸

 

返回帮助目录