输入二个整数m和n,输出二数之间的所有素数(包括m和n),统计素数个数,并计算这些素数的累加和。

来源:百度知道 编辑:UC知道 时间:2024/05/10 10:07:37
输出样例1:

2 30
2 3 5 7 11 13 17 19 23 29
N=10
sum=129

输出样例2:

9 3
3 5 7
N=3
sum=15

我的程序如下:
#include<stdio.h>
main()
{
int m,n,min,max;
int i,j,N=0;
int sum;
sum=0;
scanf("%d%d",&m,&n);
if(m>n)
min=n,max=m;
else min=m,max=n;
for(i=min;i<=max;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0) break;
N++;
printf("%d ",i);
sum=sum+i;
}
}
printf("N=%d\nsum=%d\n",N,sum);
}
问题是运行出来不对,帮我在我的基础上修改吧?看错在哪?

逻辑没有理清楚,我改过来了,你自己看看吧,我用了几个例子是正确的。
#include<stdio.h>
main()
{
int m,n,min,max;
int i,j,N=0;
int sum;
sum=0;
scanf("%d%d",&m,&n);
if(m>n)
{min=n,max=m;}
else { min=m,max=n;}
for(i=min;i<=max;i++)
{
for(j=2;j<i;j++)
if(i%j==0) break;
if (j >= i)
{
N++;
sum=sum+i;
}
}
printf("N=%d\nsum=%d\n",N,sum);
}

下面是改过的,你的程序,每次只要有一个for(j=2;j<i;j++)
j不是i的因子,你就把i当素数处理一个,
如i为6时,4、5都不是6的因子,你就处理了两次6
还有,j循环不用到i,到i/2就行,其实到sqrt(i)就可以,不过还得加头文件,就不给你改了

#include<stdio.h>
main()
{
int m,n,min,max;
int i,j,N=0;
int sum;
sum=0;
scanf("%d%d",&m,&n);
if(m>n)
min=n,max=m;
else min=m,max=n;
for(i=min;i<=max;i++)
{
bool flag=true;
for(j=2;j<i/2;j++)
{<