C语言程序设计专项训练题之 素数及应用Word文件下载.docx
《C语言程序设计专项训练题之 素数及应用Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计专项训练题之 素数及应用Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
100;
i=i+2)
if(fun(i)&
&
fun(i+2))
printf("
(%2d,%2d)"
i,i+2);
printf("
\n"
);
return0;
解析:
按素数的判断方法,如果m不能被2~
编写的fun函数如下:
for(i=2;
=sqrt(n);
i++)
if(n%i==0)break;
if(i>
sqrt(n))
return1;
else
return0;
例2一般认为最小的素数是2,接着是3,5,...。
也就是说,“2”是第1个素数,“3”是第2个素数,依此类推。
编写函数fun,其功能是:
求第m个素数,并作为函数值返回。
例如,若m=20,则函数返回值为71。
intfun(intm)
intm,t;
scanf("
%d"
&
m);
t=fun(m);
t);
若m=1,则直接返回第1个素数2;
否则,从3开始判断每个奇数是否是素数,若是素数,则计数,计数到m,则返回当前的素数(即第m个素数)。
inti,n,cnt;
if(m==1)return2;
cnt=1;
for(n=3;
;
n+=2)
{
if(n%i==0)break;
cnt++;
if(cnt==m)break;
}
returnn;
二.程序填空题
1.给定程序中,函数fun的功能是:
统计所有小于等于n(n>
2)的素数的个数,素数的个数作为函数值返回。
{
inti,j,count=1;
\nTheprimenumberbetween2to%d\n"
n);
printf("
%5d"
2);
for(i=3;
i<
=n;
i+=2)
/**********found**********/
for(___1___;
j<
i;
j++)
if(___2___%j==0)
break;
if(___3___>
=i)
{count++;
printf(count%15?
"
:
"
\n%5d"
i);
returncount;
intn=20,r;
r=fun(n);
\nThenumberofprimeis:
%d\n"
r);
2.用筛选法可得到2~n(n<
10000)之间的所有素数,方法是:
首先从素数2开始,将所有2的倍数的数从数表中删除(把数表中相应位置的值置为0);
接着从数表中找到下一个非0数,并从数表中删除该数的所有倍数,以此类推,直到所找的下一个数等于n为止。
这样会得到一个序列:
2,3,5,7,11,13,17,19,23,…。
函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。
inta[10000],i,j,count=0;
i++)a[i]=i;
i=2;
while(i<
n)
for(j=a[i]*2;
j+=___1___)
a[j]=0;
i++;
while(___2___==0)
i++)
if(a[i]!
=___3___)
{
count++;
a[i]);
3.给定程序中,函数intfun(intn)的功能是判断正整数n是否素数,若是返回“1”,否则,返回“0”;
在主函数中,求出和为n(设n为大于4的偶数)的两个素数的积的最大值。
例如,输入n的值为50,输出应为589。
说明:
和为50的两个素数有3和47(积为141)、7和43(积为301)、13和37(积为481)、19和31(积为589)。
/**********found**********/
if(___1___)
inti,n,p=0;
n);
=n/2;
___2___)
if(___3___)p=i*(n-i);
%d\n"
p);
三.程序填空题参考答案
1.
(1)j=2
(2)i(3)j
2.
(1)a[i]
(2)a[i](3)0
3.
(1)i>
sqrt(n)
(2)fun(n-i)(3)i*(n-i)>
p
四.程序设计题
1.编写函数fun,其功能是:
找出一个大于形参m且紧随m的素数,并作为函数值返回。
例如,若m=20,则函数返回值为23。
2.编写函数fun,其功能是:
计算并返回high以内最大的10个素数之和。
若high以内的素数不足10个,则返回值为high以内所有的素数之和。
例如,若high的值为100,则函数返回值为732。
intfun(inthigh)
intn;
fun(n));
3.编写函数fun,其功能是:
计算3到n之间(含3和n)所有素数的平方根之和。
例如,在主函数中给n输入100后,输出为:
sum=148.874270。
doublefun(intn)
doublesum;
\n\nInputn:
sum=fun(n);
\n\nsum=%f\n\n"
sum);
4.编写函数fun,它的功能是:
将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入175,则应输出:
1923293137。
voidfun(intm,intk,intxx[])
intm,n,zz[1000];
\nPleaseentertwointegers:
%d%d"
m,&
fun(m,n,zz);
for(m=0;
m<
n;
m++)
%d"
zz[m]);
5.编写函数fun,它的功能是:
求出小于或等于lim的所有素数并存放到数组aa中,函数返回求出素数的个数。
#defineMAX100
intfun(intlim,intaa[MAX])
intlimit,i,sum;
intaa[MAX];
输入一个整数"
&
limit);
sum=fun(limit,aa);
for(i=0;
i<
sum;
if(i%10==0&
i!
=0)printf("
);
aa[i]);
6.编写函数fun,它的功能是:
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,若输入:
17,则应输出:
9和46891012141516。
voidfun(intm,int*k,intxx[])
intm,n,zz[100];
\nPleaseenteranintegernumberbetween10and100:
n);
fun(n,&
m,zz);
printf("
\n\nThereare%dnon-primenumberslessthan%d:
m,n);
for(n=0;
n<
m;
n++)
\n%4d"
zz[n]);
五.程序设计题参考程序
1.intfun(intm)
inti,k;
for(i=m+1;
for(k=2;
k<
i;
k++)
if(i%k==0)break;
if(k>
=i)
returni;
2.intfun(inthigh)
intsum=0,n=0,j,yes;
while(high>
=2&
10)
yes=1;
for(j=2;
=high/2;
j++)
if(high%j==0)
yes=0;
if(yes){sum+=high;
n++;
high--;
returnsum;
3.doublefun(intn)
doubles=0.0;
inti,k;
i+=2)
for(k=3;
k<
=i/3;
k+=2)
if(i%k==0)break;
if(k>
i/3)
s+=sqrt(1.0*i);
returns;
4.voidfun(intm,intk,intxx[])
intx,i,n;
x=m+1;
n=0;
while(n<
k)
=x/2;
if(x%i==0)break;
x/2)xx[n++]=x;
x++;
5.intfun(intlim,intaa[MAX])
inti,k,n;
if(lim<
2)return0;
aa[0]=2;
n=1;
=lim;
for(k=0;
k++)
if(i%aa[k]==0)break;
=n)aa[n++]=i;
6.voidfun(intm,int*k,intxx[])
inti,j=0,t;
for(i=4;
m;
for(t=2;
t<
=i/2;
t++)
if(i%t==0)break;
if(t<
=i/2)xx[j++]=i;
*k=j;