我的代码应该怎么修改
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
#include <math.h>
int main(){
int m,n,i,count=0,sum=0,flag=0;
scanf("%d %d",&m,&n);
for(m;m<=n;m++){
for(i=2;i<=sqrt(m)+1;i++){
if(m%i==0){
count++;
sum+=m;
}
break;
}
}
printf("%d %d",count,sum);
return 0;
}
判断素数的逻辑错误了,代码修改如下:
#include <stdio.h>
#include <math.h>
int main(){
int m,n,i,count=0,sum=0,flag=0;
scanf("%d %d",&m,&n);
for(m;m<=n;m++){
for(i=2;i<=sqrt((double)m)+1;i++){
if(m%i==0) //m%i==0,说明不是素数
break;
}
if(i>sqrt((double)m))
{
count++;
sum+=m;
}
}
printf("%d %d",count,sum);
return 0;
}
运行结果如下:
你题目的解答代码如下:
#include <stdio.h>
#include <math.h>
int main(){
int m,n,i,count=0,sum=0,flag=0;
scanf("%d %d",&m,&n);
if (m<=1) //1 不是素数,m要从2开始循环
m=2;
for(m;m<=n;m++){
flag=0; //每次循环前flag设置为0
for(i=2;i<=(int)(sqrt(m)+0.5);i++){ //不要+1 ,当m为2时 sqrt(m)返回1.41, 1.41+1大于等于2了,i会循环到2,m能被2整除, 结果2判断不是素数了
if(m%i==0){
flag=1; //能被整除就不是素数,flag设置为1表示m是不素数
break;
}
}
if(flag==0){ //循环之后再判断能flag是不是为0,是0表示, 循环中m没有被整除 m是素数6
count++;
sum+=m;
}
}
printf("%d %d",count,sum);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
一些细节上的处理错误,改正如下:
#include <stdio.h>
#include <math.h>
int main(){
int m,n,i,count=0,sum=0;//flag没用到 删去
scanf("%d %d",&m,&n);
for(m=m;m<=n;m++) //m改为m=m
{
for(i=2;i<=sqrt(m)+1;i++)
{
if(m%i==0)
break;
}
if(i>sqrt(m))//进一步筛选判断
{
count++;
sum+=m;
}
}
printf("%d %d",count,sum);
return 0;
}
运行结果如图:
以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!
#include <stdio.h>
#include <math.h>
int main() {
int m, n, i, count = 0, sum = 0, flag = 0;
//flag在这种判断素数的方法中不需要
scanf("%d %d", &m, &n);
/*if (m <= 0 || m == 1)
m = 2;
else if (m > n)
return 0;
if (m == 2)
sum += 2;*/
//上面这一段注释掉的代码保证了区间下限 m小于等于0 以及 m等于1 或 下限m大于上限n 时都能够正常运行
for (m; m <= n; m++)
{//for语句可以改成 for (; m <= n; m++)
for (i = 2; i <= (int)sqrt(m) + 1; i++)
{//sqrt()函数的返回值为浮点数,强制转换为int类型
if (m%i == 0)
break;
}
if (i > (int)sqrt(m) + 1)
{
count++;
sum += m;
printf("%d\n", m);
//去掉注释符号可以打印该区间的素数
}
}
printf("%d %d", count, sum);
return 0;
}
代码里已写了注释,望细看