全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)—(十)(求解数学中特殊的数)

实战训练1—完全数

问题描述:

数学上的“完全数”是指真因子(除了自身以外的约数)之和等于它本身的自然数。例如,6的因子是1,2,3,而1+2+3=6,所以6是完全数。如果一个正整数小于它的所有真因数之和,被称为“不足数”。如果一个正整数大于它的所有真因数之和,被称为“过剩数”。编程实现判断一个正整数是完全数、不足数还是过剩数。

输入格式:

输入一行,包含一个正整数n

输出格式:

输出一行,如果n是完全数,则输出"Perfect",不足数则输出"Deficient",过剩数则输出"Abundant"。

输入输出样例:

输入样例1

输出样例1

28

Abundant

输入样例2

输出样例2

11

Deficient

输入样例3

输出样例3

36

Abundant

问题分析:

根据题意,对于正整数n需要计算其所有正因子(不包括它本身)的和,借鉴求素数的思想,从1开始到n-1结束依次去整除n,使用循环来实现,循环变量i初始值为1,终值为n-1,更新表达式为自增运算,循环体内循环变量依次去整除n,如果n%i==0,那么将i累加到因子和,最后判断因子和是否等于它本身,等于则这个数是完全数,小于则为不足数,否则为过剩数。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,sum=0;//定义正整数n和,因子和变量sum并初始化为0
	cin>>n;//输入n
	for(int i=1; i<n; i++) {//定义循环变量i,从1到n-1 
		if(n%i==0) {//循环变量i依次去整除n,判断i是否为n的因子 
			sum += i;//将因子i累加到和变量sum中 
		}
	}
	if(sum==n) {//判断sum是否和该数相等 
		cout<<"Perfect"<<endl;//完全数 
	} else if(sum>n) {//判断sum是否大于n 
		cout<<"Abundant"<<endl;//过剩数 
	} else {
		cout<<"Deficient"<<endl;//不足数 
	}
	return 0;
}

 在判断素数时,对代码进行了改进,每个数的因子是成对出现的,所以找到一个因子之后,让n去除以该因子得到另一个因子,当然需要考虑这两个因子是否相等,同时需要将该数本身去除出去,可以将循环变量的终值修改为sqrt(n),这样减少了代码循环次数,提高了效率。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {
	int n,sum=0;//定义正整数n和,因子和变量sum并初始化为0
	cin>>n;//输入n
	for(int i=1; i<=sqrt(n); i++) {//定义循环变量i,从1到sqrt(n) 
		if(n%i==0) {//循环变量i依次去整除n,判断i是否为n的因子 
			if(i != n/i){//判断两个因子是否相等,如果不相等进入本分支 
				sum += i;//将因子i累加到和变量sum中 
				if(n/i != n){//需要考虑i为1时,另一因子是该数本身,所以不能将本身累加到和sum中 
					sum += n/i;//将另一个因子n/i累加到和变量sum中 
				}
			}else{//两个因子相等
				sum += i;//两个因子相等只需累加一次 
			} 		
		}
	}
	if(sum==n) {//判断sum是否和该数相等 
		cout<<"Perfect"<<endl;//完全数 
	} else if(sum>n) {//判断sum是否大于n 
		cout<<"Abundant"<<endl;//过剩数 
	} else {
		cout<<"Deficient"<<endl;//不足数 
	}
	return 0;
}

实战训练2—寻找指定范围的完全数

问题描述:

数学上的“完全数”是指真因子(除了自身以外的约数)之和等于它本身的自然数。例如,6的因子是1,2,3,而1+2+3=6,所以6是完全数。输入两个整数m和n,且m<=n,输出m到n这个范围内所有的完全数。

输入格式:

输入一行,两个整数m和n,且m<=n。

输出格式:

输出一行,输出所有的完全数,完全数之间用一个空格隔开。

输入输出样例:

输入样例

输出样例

2 10001

6 28 496 8128

问题分析:

通过实战训练2可知判断一个整数是否为完全数时采用单层循环,现在该训练修改为统计某个范围内的完全数,即对该范围内的所有整数,依次去判断该整数是否为是否为完全数,因此需要采用for循环嵌套来实现,外层循环变量i表示整数范围m到n,内层循环变量j表示是否为i的因子,j的取值从1到i-1,用j去整除i。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {
	int m,n;//定义正整数范围m和n
	cin>>m>>n;//输入m和n的值 
	for(int i=m;i<=n;i++){//定义外层循环,循环变量i从m到n 
        int sum =0;//定义因子和变量sum,并初始化为0 
        for(int j=1;j<i;j++){//定义内层循环,循环变量j依次去整除i,判断j是否为i的因子
            if(i%j==0){//如果i能被j整除 
                sum += j;//将因子j累加到和变量sum中 
            }
        }
        if(sum == i){//如果因子和等于该数本身,则为完全数 
            cout<<i<<" ";//输出该完全数i 
        }
    }
	return 0;
}

 同理将内层循环的终值值设置为sqrt(i),程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {
	int m,n;//定义正整数范围m和n
	cin>>m>>n;//输入m和n的值
	for(int i=m; i<=n; i++) { //定义外层循环,循环变量i从m到n
		int sum =0;//定义因子和变量sum,并初始化为0
		for(int j=1; j<=sqrt(i); j++) {//定义循环变量j,从1到sqrt(i)
			if(i%j==0) {//循环变量j依次去整除i,判断j是否为i的因子
				if(j != i/j) { //判断两个因子是否相等,如果不相等进入本分支
					sum += j;//将因子j累加到和变量sum中
					if(i/j != i) { //需要考虑j为1时,另一因子是该数本身,所以不能将本身累加到和sum
						sum += i/j;//将另一个因子i/j累加到和变量sum中
					}
				} else { //两个因子相等
					sum += j;//两个因子相等只需累加一次
				}
			}
		}
		if(sum == i) { //如果因子和等于该数本身,则为完全数
			cout<<i<<" ";//输出该完全数i
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

若依中Feign调用的具体使用(若依微服务版自身已集成openfeign依赖,并在此基础上定义了自己的注解)

若依中Feign调用具体使用 注意&#xff1a;以下所有步骤实现的前提是需要在启动类上加入注解 EnableRyFeignClients 主要是为开启feign接口扫描 1.创建服务提供者(provider) 导入依赖(我在分析依赖时发现若依本身已经引入openfeign依赖,并在此基础上自定义了自己的EnableRyF…

基于Springboot +Vue 实验课程预约管理系统

基于Springboot Vue 实验课程预约管理系统 前言 在现代教育领域&#xff0c;实验课程预约管理系统扮演着至关重要的角色。随着教学资源的日益紧张和学生需求的多样化&#xff0c;传统的人工管理方式已难以满足高效、透明的课程安排需求。基于SpringBootVue的实验课程预约管理…

CSS2笔记

一、CSS基础 1.CSS简介 2.CSS的编写位置 2.1 行内样式 2.2 内部样式 2.3 外部样式 3.样式表的优先级 4.CSS语法规范 5.CSS代码风格 二、CSS选择器 1.CSS基本选择器 通配选择器元素选择器类选择器id选择器 1.1 通配选择器 1.2 元素选择器 1.3 类选择器 1.4 ID选择器 1.5 基…

【偏好对齐】通过ORM直接推导出PRM

论文地址&#xff1a;https://arxiv.org/pdf/2412.01981 相关博客 【自然语言处理】【大模型】 ΨPO&#xff1a;一个理解人类偏好学习的统一理论框架 【强化学习】PPO&#xff1a;近端策略优化算法 【偏好对齐】PRM应该奖励单个步骤的正确性吗&#xff1f; 【偏好对齐】通过OR…

springmvc--请求参数的绑定

目录 一、创建项目&#xff0c;pom文件 二、web.xml 三、spring-mvc.xml 四、index.jsp 五、实体类 Address类 User类 六、UserController类 七、请求参数解决中文乱码 八、配置tomcat,然后启动tomcat 1. 2. 3. 4. 九、接收Map类型 1.直接接收Map类型 &#x…

第五届电网系统与绿色能源国际学术会议(PGSGE 2025)

2025年第五届电网系统与绿色能源国际学术会议(PGSGE 2025) 定于2025年01月10-12日在吉隆坡召开。 第五届电网系统与绿色能源国际学术会议&#xff08;PGSGE 2025&#xff09; 基本信息 会议官网&#xff1a;www.pgsge.org【点击投稿/了解会议详情】 会议时间&#xff1a;202…

CSS——4. 行内样式和内部样式(即CSS引入方式)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>方法1&#xff1a;行内样式</title></head><body><!--css引入方式&#xff1a;--><!--css的引入的第一种方法叫&#xff1a;行内样式将css代码写…

彩色图像分割—香蕉提取

实验任务 彩色图像分割—香蕉提取 利用香蕉和其它水果及其背景颜色在R,G,B分量上的差异进行识别,根据香 蕉和其它水果在R,G,B分量的二值化处理&#xff0c;获得特征提取的有效区域&#xff0c;然后提取 特征&#xff0c;达到提取香蕉的目的。附&#xff1a;统计各种水果及个数…

【算法】克里金(Kriging)插值原理及Python应用

文章目录 [toc] 前言一、克里金插值原理1.1 概述1.2 基本公式1.2 权重 w i w_i wi​的确定1.3 拟合函数的确定 二、Python建模与可视化2.1 Demo2.1.1 随机生成已知格网点2.1.2 拟合2.1.3 评估内符合精度2.1.3 内插未知格网点2.1.4 画图 2.2 结果图 参考文献 前言 最近学习了一下…

QML自定义滑动条Slider的样式

代码展示 import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.1Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Slider {id: controlvalue: 0.5background: Rectangle {x: control.leftPaddingy: control.topPadding …

Android Studio学习笔记

01-课程前面的话 02-Android 发展历程 03-Android 开发机器配置要求 04-Android Studio与SDK下载安装 05-创建工程与创建模拟器 在 Android Studio 中显示 “Device Manager” 有以下几种方法&#xff1a; 通过菜单选项 打开 Android Studio&#xff0c;确保已经打开了一个…

Qt天气预报系统设计界面布局第四部分右边

Qt天气预报系统 1、第四部分右边的第一部分1.1添加控件 2、第四部分右边的第二部分2.1添加控件 3、第四部分右边的第三部分3.1添加控件3.2修改控件名字 1、第四部分右边的第一部分 1.1添加控件 拖入一个widget&#xff0c;改名为widget04r作为第四部分的右边 往widget04r再拖…

Spring boot + Hibernate + MySQL实现用户管理示例

安装MySQL Windows 11 Mysql 安装及常用命令_windows11 mysql-CSDN博客 整体目录 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLS…

Spring Boot 整合 Keycloak

1、概览 本文将带你了解如何设置 Keycloak 服务器&#xff0c;以及如何使用 Spring Security OAuth2.0 将Spring Boot应用连接到 Keycloak 服务器。 2、Keycloak 是什么&#xff1f; Keycloak是针对现代应用和服务的开源身份和访问管理解决方案。 Keycloak 提供了诸如单点登…

【Rust自学】10.2. 泛型

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 题外话&#xff1a;泛型的概念非常非常非常重要&#xff01;&#xff01;&#xff01;整个第10章全都是Rust的重难点&#xff01;&#xf…

51单片机——共阴数码管实验

数码管中有8位数字&#xff0c;从右往左分别为LED1、LED2、...、LED8&#xff0c;如下图所示 如何实现点亮单个数字&#xff0c;用下图中的ABC来实现 P2.2管脚控制A&#xff0c;P2.3管脚控制B&#xff0c;P2.4管脚控制C //定义数码管位选管脚 sbit LSAP2^2; sbit LSBP2^3; s…

SwiftUI 撸码常见错误 2 例漫谈

概述 在 SwiftUI 日常撸码过程中&#xff0c;头发尚且还算茂盛的小码农们经常会犯这样那样的错误。虽然犯这些错的原因都很简单&#xff0c;但有时想要快速准确的定位它们却并不容易。 况且这些错误还可能在模拟器和 Xcode 预览&#xff08;Preview&#xff09;表现的行为不甚…

米哈游可切换角色背景动态壁纸

米哈游可切换角色背景动态壁纸 0. 视频 B站演示: 米哈游可切换角色背景动态壁纸-wallpaper 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列 (衍生 wallpaper壁纸引擎 用)网站: 网页版在线预览 (没有搞大小适配, 建议横屏看; 这个不能切角色, 只能在wallpaper中切)仓库: GitHub…

OWASP ZAP之API 请求基础知识

ZAP API 提供对 ZAP 大部分核心功能的访问,例如主动扫描器和蜘蛛。ZAP API 在守护进程模式和桌面模式下默认启用。如果您使用 ZAP 桌面,则可以通过访问以下屏幕来配置 API: Tools -> Options -> API。 ZAP 需要 API 密钥才能通过 REST API 执行特定操作。必须在所有 …

Elasticsearch: 高级搜索

这里写目录标题 一、match_all匹配所有文档1、介绍&#xff1a; 二、精确匹配1、term单字段精确匹配查询2、terms多字段精确匹配3、range范围查询4、exists是否存在查询5、ids根据一组id查询6、prefix前缀匹配7、wildcard通配符匹配8、fuzzy支持编辑距离的模糊查询9、regexp正则…