|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是
计算m到n之间所有素数的和,其中 2 <= m <=n <=100
输入格式:
请在这里写输入格式。例如:输入两个正整数
输出格式:
请在这里描述输出格式。例如:输出两个正整数之间的素数和。
我的代码是
#include<stdio.h>
int su(int x)
{
int z=x;int y;
for(y=2;y<=z;y++)
{
if(z%y==0)break;
if(z<y) return 0;
else return z;
}
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
int i,t,s=0;
if(a<b) t=a,a=b,b=t;
for(i=a;i>=b;i--)
{
s=s+su(i);
}
printf("%d",s);
}
运行结果大于正确答案 错在哪了啊
代码中存在以下问题:
1. 函数 su 中的 if(z<y) return 0; 应该放在 for 循环结束后,因为只有在 for 循环中没有找到 y 能够整除 z 时才能判断 z 是否小于 y 。
2. 函数 su 中的 else return z; 应该放在 for 循环结束后,因为只有在 for 循环中没有找到 y 能够整除 z 时才能返回 z 。
3. 函数 su 中的 if(z<y) return 0; 应该改为 if(y<z) return 0; ,因为只有在 y 小于 z 时才能判断 z 是否能够被整除。
4. 函数 su 中应该添加一个 return 1; ,以表示 x 是素数。
5. 在主函数中,应该将 if(a<b) t=a,a=b,b=t; 改为 if(a>b) t=a,a=b,b=t; ,因为题目要求 m <= n 。
修改后的代码如下:
- #include<stdio.h>
- int su(int x)
- {
- int y;
- for(y=2;y<=x;y++)
- {
- if(x%y==0) break;
- if(y<x) continue;
- else return 1;
- }
- return 0;
- }
- int main()
- {
- int a,b;
- scanf("%d%d",&a,&b);
- int i,t,s=0;
- if(a>b) t=a,a=b,b=t;
- for(i=a;i<=b;i++)
- {
- if(su(i)) s=s+i;
- }
- printf("%d",s);
- return 0;
- }
复制代码
|
|