|
10鱼币
本帖最后由 格格不入 于 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;
- }
复制代码 |
|