下列程序的功能是:将不超过整数m(m<2000)的所有素数存入数组xx。请编写函数 num(int m,int xx[])
下列程序的功能是:将不超过整数m(m<2000)的所有素数存入数组xx。请编写函数 num(int m,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:若输入30,则应输出:2,3,5,7,11,13,17,19,23,29。
部分源程序已给出。
请勿改动主函数main()和输出数据函数readwriteDat()的内容。
include <conio.h>
include <stdio.h>
void readwriteDat();
int num(int m, int xx[])
{
}
main ( )
{
int m,n,xx[2000];
clrscr();
printf("\nPlease enter the integer m:");
scanf(" %d" ,&m);
n = num(m, xx);
for(m-0;m printf(" %d" ,xx[m]);
printf("\n" );
readwriteDat();
}
viod readwriteDat ()
{
int m,n,xx[1000], i;
FILE *rf,*wf;
rf=fopen("in.dat" ," r" );
wf=fopen(" out.dat" ," w" );
for(i=0;i<10;i++){
fscanf(rf," %d" ,&m);
n=num(m, xx);
for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]);
fprintf(wf,"\n" );
}
fclose(rf);
fclose(wf);
}
int hum(int m, int xx[]) { int s=0; int flag[2000]; /*初始化标记数组*/ for (i=0; i=m; i++) flag[i]=0; /*0和1不是素数*/ flag[0]=flag[1]=1; /*从2开始搜索素数*/ for(i=2; i=m;i++) { /*被标记为1的不是素数*/ if(flag[i])continue; /*i是素数,输出*/ xx[s++]=i; /*将所有i的倍数标记为1*/ /*小优化:小于i*i的数必有小于i的素因数,已标记*/ for(j=i*i;i=m;j+=i) flag[j]=1; } /*返回不超过m的素数个数*/ return S; } 解析:类型:素数筛选。
关键点:素数筛选算法。
求给定范围1~n内的所有素数的题,可以使用筛选法,步骤如下:
创建一个0-1标志数组,对应1~n,1代表该数非素数,0代表素数。初始化全为0,以下面的方式将某些位置以1标记:
(1)标记位置1为1(1不是素数),当前位置为2。
(2)从当前位置开始,找到第一个标记为0的数p,p是素数;若找不到,转到6。
(3)遍历数组,将所有p的倍数的位置标记为1。
(4)当前位置前进到p+1。
(5)返回2继续。
(6)输出数组中所有标记为0的数(此步可并入第2步,找到一个输出一个)。
对于标准正态分布N(01)的概率密度函数f(x)=下列说法不正确的是()A.f(x)为偶函数B.f 数学 2020-05-14 …
含有定积分形式的非线性方程组 用matlab 该怎么求解~~Parameters a,b,c,d, 数学 2020-05-16 …
下面程序段运行后,变量x的值是多少?public static void swap(int a,i 其他 2020-05-16 …
屏幕上用“*”显示0-360度的余弦函数cos(x)曲线#include #include int 其他 2020-05-16 …
这题哪里出错了?本题:输出11-999之间的数m,要求m,m*m,m*m*m都为回文数.如11,1 其他 2020-05-17 …
下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx中。请编写函数num(int m, in 计算机类考试 2020-05-23 …
如果存在正实数a,使得f(x-a)为奇函数,f(x+a)为偶函数,我们称函数f(x)为亲和函数,则 数学 2020-06-09 …
Java作业关于复数的懂得帮帮吧,完成一定加分2.\x05实验要求(1)编写一个复数(z=x+iy 其他 2020-07-17 …
已知随机变量X,Y的联合密度f(x,y),求E(X)是不是这样算?先求边缘概率密度函数f(X下标) 数学 2020-07-29 …
已知公式y=INT(x/10+0.5)/10当x=1270时y=12.8,用什么公式可以实现倒推已知 数学 2020-11-07 …