📄 题目66.txt
字号:
题目66:下列程序的功能是:计算500-800区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其间隔加、减之各,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countvalue()实现程序的要求,最后调用函数writedat()把结果cnt和sum,输出到文件out11.dat中。
注意:部分源程序已给出。
请勿改动主函数main()和输出数据函数writedat()的内容。
--------------------------
void countValue() /*标准答案,有问题*/
{int I,j,half,yy[100];
for(I=500;I<=800;I++)
{half=I/2;
for(j=2;j<half;j++)
if (I%j==0) break;
if (j>=half) {yy[cnt]=I;cnt++;}
}
for (I=0,j=-1;I<cnt;I++)
{j=j*-1; sum+=j*yy[I];} /*此处有误!!!应为:{sum+=j*yy[I];j=j*-1; }*/
}
或者:
本题要求从大到小的顺序进行加减运算,因此这里采用从800开始循环到500这样就能保证出来的素数就是从大到小,内嵌的for()再加上if()是用来判断是否为素数。其中k用来控制加减运算。
void countValue()
{int i,j,k=1;
for(i=800;i>=500;i--)
{for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i)
{cnt++;sum+=k*i;k=-1*k;}
}
}
int ss(int m)
{ int i,k=1;
for(i=2;i<m/2;i++)
if(m%i==0) k=0;
return k; }
void countvalue()
{ int i,j=0,a[300],k=1;
cnt=0;
sum=0;
for(i=800;i>500;i--)
if(ss(i))
{ cnt++;
a[j++]=i; }
for(i=0;i<cnt;i++)
{ sum+=k*a[i];
k=-k; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -