本帖最后由 格格不入 于 2017-7-5 21:07 编辑
原题:我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
我写的代码(算法很笨,不要嘲笑)第一个for计算从第1到n-1个的素数和=sum1,第二个for计算从第1到m个的素数和=sum2,sum=sum2-sum1,即最终结果,然而比如输入3 和5 吧,计算的却是第3个到第 4 个素数和!在第二个scanf后加入m = (m+n-2);后(代码中注释掉的那个)能消除这个bug,百思不得其解,求大神指教?#include<stdio.h>
int main()
{
int n,m;
scanf("%d",&n);
scanf("%d",&m);
//m = (m+n-2);
int sum = 0,sum1 = 0,sum2 = 0;
int num;
int count = 0;
for(num= 2; count < (n-1); num ++)
{
int i;
_Bool flag = 1;
for(i = 2; i < num ;i++)
{
if(num % i == 0 )
{
flag = 0;
}
}
if(flag)
{
count ++;
sum1 += num;
}
}
for(num= 2; count <= m ; num ++)
{
int i;
_Bool flag = 1;
for(i = 2; i <num ;i++)
{
if(num % i == 0 )
{
flag = 0;
}
}
if(flag)
{
count ++;
sum2 += num;
}
}
sum = sum2 - sum1;
printf("%d",sum);
return 0;
}
|