首页 > 其他分享 >质数之和【计算第x个到第y个质数之和】

质数之和【计算第x个到第y个质数之和】

时间:2022-11-06 14:56:45浏览次数:50  
标签:origin count return min int 质数 计算

题目:质数之和

已知,第一个质数是2,第二个质数是3,第三个质数是5,第四个质数是7,第五个质数是11,第六个质数是13,第七个质数是17,输入两个不相等的正整数a和b,求出第a个质数到第b个质数当中所有质数和。a和b之间以空格间隔,其中a和b都小于200。

输入1:1 4  输出1:17

输入2:7 2  输出2:56

第一步:我们来分析题目

需要注意的要点有:

  1.输入的a和b是“第几个质数”,这启发我们需要使用数组;

  2.求质数和,或许需要循环相加;

  3.观察输入输出2可以发现,a、b大小是不确定的!这就需要我们进行if判断两者之间的大小了。

第二步:梳理题目块

经过分析,我们的c语言程序需要这几个部分:

  1.判断一个数字是否为质数

    为了方便和直观起见,我另定义了一个函数isPrime来判断质数,方法是:对所有从2开始到这个数字之间的、能够被这个数字整除的数用count计数。当count==0时,说明这个数除了1和它本身外没有其他因数了,即质数,return它自己;若count!=0,说明它不是质数,return 0。

        

      int isPrime(int x)
      {
        int i,count=0;
        for(i=2 ; i<x ; i++)
        {
          if(x%i==0)
          {
            count++;
          }
        }
        if(count==0)
        {
          return x;
        }
        else
        {
          return 0;
        }
      }

  2.如果是质数,将这个质数的值赋给数组中的一个变量;如果不是,将这个数字加一以后再循环(发现这里是第一个循环)

  

  int main()
  {
    int a[1000]={0},j,m;
    int origin=2;
    for(j=0 ; j<=1000 ; j++)
    {
      for(m=0 ; a[j]==0 ; m++)
      {
        if(isPrime(origin)==0)
        {
          origin++;
        }
        else
        {
          a[j] = origin;
          origin++;
        }
      }
    }

  3.输入x,y,判断x,y大小之后分别赋给大数max和小数min,利用循环和数组进行求和

    int x,y;
    scanf("%d %d",&x,&y);
    int sum=0;
    int max,min;
    if(x>y)
    {
      max = x;
      min = y;
     }
    else
    {
      max = y;
      min = x;
    }

    for(j=min-1 ; j<max ; j++)
    {
      sum += a[j];
    }
    printf("%d",sum);

    return 0;
  }

第三步:整合代码

#include<stdio.h>
int isPrime(int x)
{
  int i,count=0;
  for(i=2 ; i<x ; i++)
  {
  if(x%i==0)
  {
    count++;
  }
  if(count==0)
  {
    return x;
  }
  else
  {
    return 0;
  }
}

int main()
{
  int a[1000]={0},j,m;
  int origin=2;
  for(j=0 ; j<=1000 ; j++)
  {
    for(m=0 ; a[j]==0 ; m++)
    {
      if(isPrime(origin)==0)
      {
        origin++;
      }
      else
      {
        a[j] = origin;
        origin++;
      }
    }
  }

  int x,y;
  scanf("%d %d",&x,&y);
  int sum=0;
  int max,min;
  if(x>y)
  {
    max = x;
    min = y;
  }
  else
  {
    max = y;
    min = x;
  }

  for(j=min-1 ; j<max ; j++)
  {
    sum += a[j];
  }
  printf("%d",sum);

  return 0;
}

标签:origin,count,return,min,int,质数,计算
From: https://www.cnblogs.com/lyp051214/p/16862588.html

相关文章

  • 计算机快捷键和Dos基础命令
    计算机快捷键任务管理器→ctrl+shift+esc打开任务管理器shift+delete→永久删除基础的DOS命令打开CMD的方式开始+系统+命令提示符Win键+R输入cmd打开控制台(推荐......
  • 2022-2023 20221410《计算机基础与程序设计》第十周学习总结
    学期(2022-2023-1)学号(20221410)《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作......
  • Java学习笔记1-计算机基础
    计算机冯诺依曼结构快捷键Dos命令开始+系统+命令提示符Win+R输入cmd打开控制台在任意文件夹下,按住shift+鼠标右键点击,在此处打开命令行窗口资源管理器的......
  • 计算机系统概论 第三版 电子书 pdf
    《IntroductiontoComputingSystems:FromBits&GatestoC/C++&Beyond,3rdEdition》作者:YalePatt/SanjayPate出版社:McGraw-HillEducation副标题:From......
  • 计算机7班李程远实验3
    实践任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_spaces(intn);voidprin......
  • 计算机等级考试二级C语言上机题集(第46~50套)
    第46套1.程序填空题给定程序的功能是调用函数fun建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个......
  • 计算机等级考试二级C语言上机题集(第41~45套)
    第41套1.程序填空题给定程序中,函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。请在下划线处填入正确的内容并将下划线删除,使程序得出正确......
  • 计算机等级考试二级C语言上机题集(第36~40套)
    第36套1.程序填空题给定程序中,函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并通过全局变量c1、c2、c3返回主函数。例如,当n=123114350时,结果为:c1=3 c2=1 ......
  • 计算机等级考试二级C语言上机题集(第31~35套)
    第31套1.程序填空题给定程序中,函数fun的功能是:有N*N矩阵,将矩阵中的外围元素顺时针旋转。操作顺序是:首先将第1行元素值存入临时数组r,然后使第1列成为第1行,最后1行成为第1列......
  • 计算机等级考试二级C语言上机题集(第26~30套)
    第26套1.程序填空题给定程序中,函数fun的功能是:计算 例如,若x=2.5,n=15时,函数值为:1.917915。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:......