[C++题目]:关于素数的问题:求0到200内第n个到第m个素数的和

题目内容:

给定两个整数n和m,0<n<=m<=200,编写程序计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
注意:是第n个素数到第m个素数,不是n和m之间的素数!

输入格式:
两个正整数,第一个表示n,第二个表示m。

输出格式:
输出所求的和。

输入样例
2 4

输出样例:
15

问题分析

  1. 素数:因数只有1和它本身的数(即只能被1和它本身整除);
  2. 首先在无限个数里循环筛选出素数,用一个计数器,每有一个素数就加1;
  3. 当素数计数器在n和m之间时,sum累加,当计数器等于m时,输出sum;
  4. 在这段代码里面定义的bool b=0是用了之前第四章笔记中写到的标记变量【C++】第4章:(二)素数算法问题中的break,continue和标记变量
    当遇到素数时b=1,跳出循环,这样用b=0和b=1区别开是否是素数。在每次循环之前要重新给b赋值0,之前忘记重新赋值就出错了;

代码如下:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
 int n,m,i,a,count=0,sum=0;
 bool b=0;//标记变量
 cin>>n>>m; //0<n<=m<200
 for(i=2;;i++){ //循环2~无穷的所有数
 b=0;//每次筛选之前定义标记变量b=0
  for(a=2;a<=sqrt(i);a++){ //筛选素数
   if(i%a==0) {
   b=1;//区分开是否是素数
   break;//b不是素数就重新筛选
   }
  }
   if(b==0) {
   count++;//每有一个素数计数器加1,记录是第几个素数
   if ((count>=n)&&(count<=m)){
    sum+=i;//当是第n到第m个素数时,sum总数累加
   }
  }
  if(count==m){//当到第m个素数时,输出sum
   cout<<sum<<endl;
   break;//结束2~无穷的循环
  }
 }
return 0;
}
发布了27 篇原创文章 · 获赞 1 · 访问量 435
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览