首页IT科技第2021个质数是什么(质数之和【计算第x个到第y个质数之和】)

第2021个质数是什么(质数之和【计算第x个到第y个质数之和】)

时间2025-05-03 12:33:35分类IT科技浏览3939
导读:题目:质数之和...

题目:质数之和

已知           ,第一个质数是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

        {

          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

    {

      sum += a[j];

    }

    printf("%d",sum);

    return 0;

  }

第三步:整合代码

#include

int isPrime(int x)

{

  int i,count=0;

  for(i=2 ; 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

  {

    sum += a[j];

  }

  printf("%d",sum);

  return 0;

}

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
win10不支持win11(微软准备发布Win10 21H2,不支持 Win11 升级的朋友可获更新) window11跳过tpm(微软官方教你如何绕过Win11 TPM和CPU检查)