当前位置: 首页 > news >正文

求n以内最大的k个素数以及它们的和

一、题目描述

本题要求计算并输出不超过n的最大的k个素数以及它们的和。

输入格式:

输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值。

输出格式:

在一行中按下列格式输出:

素数1+素数2+…+素数k=总和值

其中素数按递减顺序输出。若n以内不够k个素数,则按实际个数输出。

输入样例1:

1000 10

输出样例1:

997+991+983+977+971+967+953+947+941+937=9664

输入样例2:

12 6

输出样例2:

11+7+5+3+2=28

二、解题思路

根据题目描述,预想可能需要的变量如下

1.输入的变量n,k,题目要求会不断遍历小于等于n的整数,去找最大的k个素数并求和;

如果不足k个,打印到最小的素数2求和。

2.题目涉及到打印有限个素数,所以可能需要一个变量count来计数,初值为0

3.而且涉及到求和,所以需要一个变量sum,初值为0.

所以上述过程写成代码是:

int n,k;
scanf("%d%d",&n,&k);
int count=0;
int sum=0;
for(int i=n;i>1;i--){...
}

在这个for循环里面,代表一个个要检验的数,我们要检验 是否为素数,那怎么检验呢?

这需要一个for循环,首先定义一个变量flag用来标记这个是是素数还是合数,素数为1,合数为0

int flag=1;//用来记录是否是素数,一开始默认都是素数,flag等于1表示这个数是素数
for(int j=2;j<=i/2;j++){   //j从2~i/2(可能有因子的区间)if(i%j==0){   //看一下i能不能被其中的一个j整除,如果能,说明这个区域有一因子flag=0;    //将flag置为0,表示这是一个合数break;     //只要有一个因子,就可以判断出来是合数了,不需要继续往下除了,结束这个循环}
}

如果是素数if(flag==1),我们要怎么办呢?直接输出吗?

题目非常重要的点就是打印有限个素数,这里就要开始根据题目要求来设想什么情况下我们素数才算是打印完了

  • 根据测试样例1,当count等于k的时候,素数打印完成求和
  • 根据测试样例2,当遍历小于等于n的整数,这个整数等于2的时候,素数打印完成求和

在这里需要多一点观察

997+991+983+977+971+967+953+947+941+937=9664

我们打印完素数之后紧接着打印一个“+”号,

不是所有的素数后面都跟着+号

比如最后一个素数,她后面跟着的是=,所以我们要考虑一下什么情况下打印最后一个素数

  • 根据测试样例1,当count等于k-1的时候,就准备开始打印最后一个素数了
  • 根据测试样例2,当遍历小于等于n的整数 ,这个整数 i 等于2的时候,就准备开始打印最后一个素数了

打印完最后一个素数的时候,可以顺带打印算式末尾的等号=以及所有的素数和sum,并跳出循环

if(flag==1){   //已经确定当前i是素数了if(count==k-1 || i==2){      //前面k-1个素数已经打印完了,或者当前数字i已经到绝境素数2了sum+=i;                  //求一下最后一个素数的累加和printf("%d=%d",i,sum);   //打印最后一个素数=sumbreak; }else if(count<k-1){        //当count小于k-1,也就是还没有打印完前面k-1个素数且i还没到绝境2printf("%d+",i);count++;                //打印完计数+1sum+=i;                //顺带求和}
}      

三、完整代码

整合一下上面的代码

#include<stdio.h>
int main(){int n,k;scanf("%d%d",&n,&k);int count=0;int sum=0;for(int i=n;i>1;i--){//用来记录是否是素数,每换一个数更新为1int flag=1;for(int j=2;j<=i/2;j++){if(i%j==0){flag=0;break;}}//已经确定当前i是素数了if(flag==1){   //前面k-1个素数已经打印完了,或者当前数字i已经到绝境素数2了if(count==k-1 || i==2){     sum+=i;                  //求一下最后一个素数的累加和printf("%d=%d",i,sum);   //打印最后一个素数=sumbreak; }else if(count<k-1){        //当count小于k-1,也就是还没有打印完前面k-1个素数且i还没到绝境2printf("%d+",i);count++;                //打印完计数+1sum+=i;                //顺带求和}}      }return 0;
}
http://www.dtcms.com/a/490079.html

相关文章:

  • 手机 网站建设在线自动取名网站怎么做
  • PHP电动汽车租赁管理系统-计算机毕业设计源码35824
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十二)Python3编程之python基础
  • 大型网站怎样做优化PHP营销推广的主要方法
  • 【泛3C篇】AI深度学习在手机前/后摄像头外观缺陷检测应用方案
  • 建设网站需要申请网站建设与管理专业好找工作吗
  • 绿色在线网站模板下载工具别人做的网站不能用怎么办
  • Initiater for mac 小巧的菜单栏OCR工具
  • ntfs可以用在mac上吗?3 种实用方案,解决Mac与NTFS硬盘兼容问题
  • 数据结构——二十、树与森林的遍历
  • 洛杉矶服务器常见问题汇总与解决方案大全
  • Linux云计算基础篇(27)-NFS网络文件系统
  • Mac安装使用Gradle
  • 夜莺监控设计思考(二)边缘机房架构思考
  • AI+大数据时代:时序数据库的架构革新与生态重构
  • 【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战
  • wordpress 导购站模板接私活app有哪些平台
  • 有哪些网站可以做推广十大奢侈品牌logo图片
  • 服务注册 / 服务发现 - Eureka
  • 2025机器人自动化打磨抛光设备及汽车零件打磨新技术10月应用解析
  • bk7258 libzip崩溃之解决
  • 【Android】【底层机制】组件生命周期以及背后的状态管理
  • CPM:CMake 包管理详细介绍
  • D3.js + SVG:数据可视化领域的黄金搭档,绘制动态交互图表。
  • 【个人成长笔记】在 QT 中 SkipEmptyParts 编译错误信息及其解决方案
  • 设计模式篇之 备忘录模式 Memento
  • dw做的网站放文件夹网页生成桌面快捷方式
  • 2017流行的网站风格随州网站建设价格
  • 鸿蒙:使用媒体查询监听屏幕方向、切换横竖屏
  • 8.list的使用