求助大佬

CSDNzr1314 2020-10-29 10:03:39
7-2 显示指定范围的素数并求和 (20分)
本题要求显示给定整数M和N区间内素数并对它们求和。

输入格式:
在一行输入两个正整数M和N(1≤M≤N≤1000)。

输出格式:
显示指定范围的素数,素数间空一格,每五个换一行。 单独一行输出素数的个数及素数的和。

输入样例:
在这里给出一组输入。例如:

4 30
输出样例:
在这里给出相应的输出。例如:

5 7 11 13 17
19 23 29
amount=8 sum=124

答案老是出错


这是我的代码:
#include <stdio.h>
#include <math.h>
int ss(int x){
int f=1;
for(int i=2;i<x;i++)
{if(x%i==0)
f=0;}

return f;
}
int main()
{
int M,N,count=0,sum=0;
scanf("%d %d",&M,&N);
if(M>=1&&M<=N&&N<=1000)
{
for(int j=M;j<=N;j++)
{if(ss(j)==1)
{count++;
if(count%5==1&&count>1)
printf("\n");
printf("%d ",j);
sum+=j;

}
}
printf("\namount=%d sum=%d",count,sum);
}
else return 0;
}

...全文
68 点赞 收藏 6
写回复
6 条回复
qzjhjxj 2020年10月30日
这是按你的代码改的,运行如下图: 程序代码:
int ss(int x){
   int f=1;
   if(x<=1) f=0; //小于等于1的数都没有素数
   if(x==2) f=1; //数字2只有1和2两个因数,因而必定是素数
   for(int i=2;i<x;i++)//从2到x-1都无法被x整除,x是素数
        if(x%i==0) f=0;
   return f;
}

int main(int argc, char* argv[])
{
    int M,N,count=0,sum=0;
    printf("请输入给定区间整数M和N(1≤M≤N≤1000):");
    scanf("%d %d",&M,&N);
    if(M>=1&&M<=N&&N<=1000)
        {
         for(int j=M;j<=N;j++)
           {if(ss(j)==1)
                {count++;
                 sum+=j;
                 printf("   %d   ",j);
                 if(count%5==0)
                 printf("\n");
                }
           }
        printf("\namount=%d sum=%d",count,sum);
       }
    else printf("输入给定区间整数M和N错误!");
    cin>>M;
    return 0;

}
回复 点赞
@大愚@ 2020年10月30日
#include <stdio.h>
#include <math.h>
int Judge(int i);
int main()
{
int m,n;
int i,j,z = 0;
int sum = 0;
printf("请输入区间范围: ");
scanf("%d %d",&m,&n);
for(i = m;i <= n;i ++)
{
j = Judge(i);
if(j == 1)
{
printf("%d ",i);
z ++;
if(z % 5 == 0)
{
printf("\n");
}
sum += i;
}
}
printf("\namount = %d sum = %d",z,sum);
return 0;
}
int Judge(int b)
{
int i,a;
if(b == 1)
{
return 0;
}
a = (int)sqrt(b);//因为如果一个数可以被别的数整除那那个数和商在开平方的值的两侧,所以求一半就可以了
for(i = 2;i <= a;i ++)
{
if(b % i == 0)
{
return 0;
}
}
return 1;
}
回复 点赞
自信男孩 2020年10月30日
#include <stdio.h>
#include <math.h>

//int ss(int x)
int is_prime(int x)
{
if (x < 2)
return 0;

//int f = 1;
int i;
for(i=2;i<x;i++)
{
if(x%i==0) {
//f=0;
break;
}
}
if (i < x)
return 0;
else
return 1;

//return f;
}
int main()
{
int M,N,count=0,sum=0;
scanf("%d %d",&M,&N);
if (M < 1 || N < M || N > 1000)
return -1;
//if(M>=1&&M<=N&&N<=1000)
//{
for(int j=M;j<=N;j++)
{
if(is_prime(j)==1)
{
count++;
if(count%5==1&&count>1)
printf("\n");
printf("%d ",j);
sum+=j;
}
}
printf("\namount=%d sum=%d",count,sum);
//}
//else return 0;
return 0;
}

供参考~

楼主的素数判断有问题,楼主判断逻辑里1也是素数了。
回复 点赞
5250 2020年10月30日
引用 6 楼 qzjhjxj 的回复:
[quote=引用 5 楼 5250 的回复:]
#include <stdio.h>
#include <math.h>
int ss(int x)
{
int f = 1;
if (x <= 2)
return 0;
for (int i = 2; i < x; i++)
{
if (x % i == 0)
f = 0;
}
return f;
}
int main()
{
int M, N, count = 0, sum = 0;
scanf("%d %d", &M, &N);
if (M >= 1 && M <= N && N <= 1000)
{
for (int j = M; j <= N; j++)
{
if (ss(j))
{
count++;
printf("%d ", j);
sum += j;
if (count % 5 == 0)
{
printf("\n");
}
}
}
printf("\namount=%d sum=%d", count, sum);
}
else
return 0;
}
楼上的第六句把2排除在外了,2是素数。[/quote]

可能我记错了吧
回复 点赞
qzjhjxj 2020年10月30日
引用 5 楼 5250 的回复:
#include <stdio.h>
#include <math.h>
int ss(int x)
{
   int f = 1;
   if (x <= 2)  
      return 0;
   for (int i = 2; i < x; i++)
   {
      if (x % i == 0)
         f = 0;
   }
   return f;
}
int main()
{
   int M, N, count = 0, sum = 0;
   scanf("%d %d", &M, &N);
   if (M >= 1 && M <= N && N <= 1000)
   {
      for (int j = M; j <= N; j++)
      {
         if (ss(j))
         {
            count++;
            printf("%d ", j);
            sum += j;
            if (count % 5 == 0)
            {
               printf("\n");
            }
         }
      }
      printf("\namount=%d sum=%d", count, sum);
   }
   else
      return 0;
}
楼上的第六句把2排除在外了,2是素数。
回复 点赞
5250 2020年10月30日
#include <stdio.h>
#include <math.h>
int ss(int x)
{
int f = 1;
if (x <= 2)
return 0;
for (int i = 2; i < x; i++)
{
if (x % i == 0)
f = 0;
}
return f;
}
int main()
{
int M, N, count = 0, sum = 0;
scanf("%d %d", &M, &N);
if (M >= 1 && M <= N && N <= 1000)
{
for (int j = M; j <= N; j++)
{
if (ss(j))
{
count++;
printf("%d ", j);
sum += j;
if (count % 5 == 0)
{
printf("\n");
}
}
}
printf("\namount=%d sum=%d", count, sum);
}
else
return 0;
}
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告