c语言中的素数编程题:计算500-800区间内素数个数,并按从大到小的顺序进行加减间隔计算求和。

2025-03-27 00:05:06
推荐回答(5个)
回答1:

#include 
//计算500-800区间内素数个数,并按从大到小的顺序进行加减间隔计算求和。
int main()
{
int cnt=0,sum=0,i,j,t=-1;
for (i=17;i>=2;i--)
{
for (j=2;j<=i/2;j++)
{
if (i%j==0) break;//在i/2前只要遇到一个能除尽的数则跳出本层for循环,则j的值一定小于等于i/2
}
if(j>i/2) //i/2前的每个数都除过一遍且不能除尽(即for循环自然结束)则判断j为素数
{
t=-t;
sum=i*t+sum;
cnt++;
}
}
printf("%d %d",cnt,sum);
return 0;
}

判断条件的位置放错了,详见注释,上边的代码是修改后的。

这里按照原程序的计算方式,为先减后加的顺序,如2到13间的素数和为:

13-11+7-5+3-2

回答2:

错了,应该把
if(j{
t=-t;
sum=i*t+sum;
cnt++;
}
这一段放在外层的for循环中,内层for循环只用作素数判断就可以了,如果不是素数,跳出的时候j就不会大于i/2,就进入下一次循环了,否则就说明是素数,会参与计算。

你放在内层循环中的话,显然意义不明,相当于不管是不是素数都做了很多次不明运算。

回答3:

错了,应该把
if(j{
t=-t;
sum=i*t+sum;
cnt++;
}
这一段放在外层的for循环中,内层for循环只用作素数判断就可以了,如果不是素数,跳出的时候j就不会大于i/2,就进入下一次循环了,否则就说明是素数,会参与计算。
你放在内层循环中的话,显然意义不明,相当于不管是不是素数都做了很多次不明运算。

回答4:

#include "stdio.h"
#include "string.h"
#include "stdint.h"

#define MAX_NUM 100

int IsPrimeNumber(int num)
{
int i;
for (i = 2; i < num / 2; i++)
{
if (num % i == 0)
return 0;
}
return 1;
}

int main(void)
{
int xx[MAX_NUM];
int i, cnt = 0;
int sum = 0;
int temp = 1;
int buf;

memset(xx, 0, sizeof(xx));

for (i = 800; i > 500; i--)
{
if (IsPrimeNumber(i))
{
xx[cnt] = i;
if (cnt > 0)
{
buf = xx[cnt] - xx[cnt - 1];
buf *= temp;
temp *= -1;
}
cnt++;
sum += buf;
}
}

for (i = 0; xx[i] != 0; i++)
{
printf("xx[%d] = %d\n", i, xx[i]);
}
printf("sum = %d, cnt = %d\n", sum, cnt);

return 0;
}

回答5:

break;改为continue;