求助大佬

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;
}

...全文
576 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧