前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二级程序填空题1002

二级程序填空题1002

作者头像
pigeon
发布2022-04-11 19:45:09
2340
发布2022-04-11 19:45:09
举报
文章被收录于专栏:电子荣耀

1、题目描述

用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,……

函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回

请在程序的下划线处填入正确的内容井把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1,C中

不得增行或删行,也不得更改程序的结构

2、部分程序:

#include <stdio.h>

#pragma warning (disable:4996)

int fun(int n)

{ int a[10000], i,j, count=0;

for (i=2; i<=n; i++) a[i] = i;

i = 2;

while (i<n) {

/**********found**********/

for (j=a[i]*2; j<=n; j+=___1___)

a[j] = 0;

i++;

/**********found**********/

while (___2___==0)

i++;

}

printf("\nThe prime number between 2 to %d\n", n);

for (i=2; i<=n; i++)

/**********found**********/

if (a[i]!=___3___)

{ count++; printf( count%15?"%5d":"\n%5d",a[i]); }

return count;

}

main()

{ int n=20, r;

r = fun(n);

printf("\nThe number of prime is : %d\n", r);

}

3、参考答案:

本题考查的是筛选算法。

本程序的 while循环中又嵌套了一个for和 while循环,内嵌的for循环用于进行素数倍数的筛选,筛选的步长为a[i],故第一空填a[i];内嵌的 while循环用于判断下一个即将被筛选的数是否为零,如果为零,则跳过(通过i++实现),即不对它的倍数进行筛选,估第二空应填a[i];最后通过一个for循环统计素数的个数,其中的if用于判断a[i]是否为零,如果为零则说明a[i]不是素数,如果不为零则说明a[i]为素数,使得记录素数个数的变量 count+1,故第三空应填0。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子荣耀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档