【蓝桥杯】43699-四平方和
四平方和
题目描述
四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。
比如:
5=02+02+12+22
7=12+12+12+22;
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对 4 个数排序:
0≤a≤b≤c≤d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。
输入描述
程序输入为一个正整数 N(N<5×106)。
输出描述
要求输出 4 个非负整数,按从小到大排序,中间用空格分开
输入输出样例
示例
输入
12
输出
0 2 2 2
解题思路
穷举法
对于给定的正整数 N,我们可以使用穷举法来找到所有可能的表示法。穷举法的思路是,我们逐个检查所有可能的 a、b、c 和 d 值,其中 a、b、c、d 都是非负整数,并且满足 a≤b≤c≤d。
优化穷举范围
为了提高效率,我们可以对 a、b、c 的取值范围进行优化。由于 a、b、c、d 都是非负整数,并且 a≤b≤c≤d,所以 a 的最大值可以取到 N 的平方根,因为 a 的平方不可能大于 N。同理,b 的取值范围可以从 a 开始,最大值可以取到 (N - a2) 的平方根。c 的取值范围可以从 b 开始,最大值可以取到 (N - a2 - b2) 的平方根。
计算 d 的值
在确定了 a、b、c 的值之后,我们可以计算 d 的值。d 的值是 (N - a2 - b2- c2) 的平方根,并且 d 必须是一个整数。
检查是否满足条件
如果 a2 + b2 + c2 + d2 等于 N,那么我们就找到了一个满足条件的表示法。由于我们按照从小到大的顺序进行穷举,所以找到的第一个表示法就是最小的表示法。
输出结果
最后,我们将找到的四个数按照从小到大的顺序输出,中间用空格分隔。
复杂度分析
这个算法的时间复杂度是 O (N3/2),因为我们使用了三层嵌套循环,每层循环的次数最多是 N 的平方根。这个算法在 N 的值不是很大时是可行的,但是对于非常大的 N,这个算法可能会非常慢。
代码实现
Python 实现
def find_four_squares(n):# 遍历所有可能的 a 值,从 0 到 sqrt(n)for a in range(int(n**0.5) + 1):# 遍历所有可能的 b 值,从 a 到 sqrt(n - a^2)for b in range(a, int((n - a*a)**0.5) + 1):# 遍历所有可能的 c 值,从 b 到 sqrt(n - a^2 - b^2)for c in range(b, int((n - a*a - b*b)**0.5) + 1):# 计算 d 的平方值d_squared = n - a*a - b*b - c*c# 检查 d_squared 是否为非负数if d_squared >= 0:# 计算 d 的值d = int(d_squared**0.5)# 检查 d 是否为整数if d * d == d_squared:# 返回结果,确保 a <= b <= c <= dreturn f"{a} {b} {c} {d}"# 如果没有找到,则返回报错信息return "No solution found"# 输入一个正整数n
number = int(input())# 获取结果并输出
result = find_four_squares(number)
print(result)
JAVA实现
import java.util.Scanner;public class FourSquares {public static String findFourSquares(int n) {// 遍历所有可能的a值,从0到sqrt(n)for (int a = 0; a <= Math.sqrt(n); a++) {// 遍历所有可能的b值,从a到sqrt(n - a^2)for (int b = a; b <= Math.sqrt(n - a * a); b++) {// 遍历所有可能的c值,从b到sqrt(n - a^2 - b^2)for (int c = b; c <= Math.sqrt(n - a * a - b * b); c++) {// 计算d的平方值int dSquared = n - a * a - b * b - c * c;// 检查d_squared是否为非负数if (dSquared >= 0) {// 计算d的值int d = (int) Math.sqrt(dSquared);// 检查d是否为整数if (d * d == dSquared) {// 返回结果,确保a <= b <= c <= dreturn a + " " + b + " " + c + " " + d;}}}}}// 如果没有找到,则返回报错信息return "No solution found";}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 输入一个正整数nint number = scanner.nextInt();// 获取结果并输出String result = findFourSquares(number);System.out.println(result);scanner.close();}
}
C++实现
#include <iostream>
#include <cmath>
using namespace std;string findFourSquares(int n) {// 遍历所有可能的a值,从0到sqrt(n)for (int a = 0; a <= sqrt(n); a++) {// 遍历所有可能的b值,从a到sqrt(n - a^2)for (int b = a; b <= sqrt(n - a * a); b++) {// 遍历所有可能的c值,从b到sqrt(n - a^2 - b^2)for (int c = b; c <= sqrt(n - a * a - b * b); c++) {// 计算d的平方值int dSquared = n - a * a - b * b - c * c;// 检查d_squared是否为非负数if (dSquared >= 0) {// 计算d的值int d = (int)sqrt(dSquared);// 检查d是否为整数if (d * d == dSquared) {// 返回结果,确保a <= b <= c <= dreturn to_string(a) + " " + to_string(b) + " " + to_string(c) + " " + to_string(d);}}}}}// 如果没有找到,则返回报错信息return "No solution found";
}int main() {int number;cin >> number;// 获取结果并输出string result = findFourSquares(number);cout << result << endl;return 0;
}
C实现
#include <stdio.h>
#include <stdlib.h>
#include <math.h>// 函数用于查找四个平方数之和等于给定数n的四个整数
char* findFourSquares(int n) {static char result[50]; // 用于存储最终结果字符串,足够长以容纳结果和提示信息for (int a = 0; a <= (int)sqrt(n); a++) {for (int b = a; b <= (int)sqrt(n - a * a); b++) {for (int c = b; c <= (int)sqrt(n - a * a - b * b); c++) {int dSquared = n - a * a - b * b - c * c;if (dSquared >= 0) {int d = (int)sqrt(dSquared);if (d * d == dSquared) {// 格式化拼接结果字符串sprintf(result, "%d %d %d %d", a, b, c, d);return result;}}}}}// 如果没找到,将提示信息存入结果字符串sprintf(result, "No solution found");return result;
}int main() {int number;scanf("%d", &number);char* output = findFourSquares(number);printf("%s\n", output);return 0;
}
运行结果
>>> 12
0 2 2 2

相关文章:
【蓝桥杯】43699-四平方和
四平方和 题目描述 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 502021222 712121222; 对于一个给定的正整数,可…...
我的“双胞同体”发布模式的描述与展望
当被“激情”晕染,重创标题、摘要探索“吸睛”。 (笔记模板由python脚本于2024年12月19日 15:23:44创建,本篇笔记适合喜欢编撰csdn博客的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免…...
flask_socketio 以继承 Namespace方式实现一个网页聊天应用
点击进入上一篇,可作为参考 实验环境 python 用的是3.11.11 其他环境可以通过这种方式一键安装: pip install flask3.1.0 Flask-SocketIO5.4.1 gevent-websocket0.10.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip list 详情如下&am…...
go mod tidy 命令
go mod tidy 是 Go 语言的命令,用于清理和更新 go.mod 和 go.sum 文件。它主要有以下功能: 移除未使用的依赖项:从 go.mod 文件中删除那些在代码中不再使用的依赖项。 添加缺失的依赖项:添加代码中使用但尚未记录在 go.mod 文件中…...
(11)YOLOv9算法基本原理
一、YOLOv9 的结构 YOLOv9 引入了可编程梯度信息(PGI),以及基于梯度路径规划的新型轻量级网络架构,为目标检测领域带来了突破性的成果。 Yolov9 网络模型主要由BackBone(主干网络)、Neck(颈层&…...
python学opencv|读取图像(十七)认识alpha通道
【1】引言 前序学习进程中,我们已经掌握了RGB和HSV图像的通道拆分和合并,获得了很多意想不到的效果,相关链接包括且不限于: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读…...
中小学教室多媒体电脑安全登录解决方案
中小学教室多媒体电脑面临学生随意登录的问题,主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析: 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用,增加设备损坏的风险。不当…...
Redis篇之Redis高可用模式参数调优,提高Redis性能
1. Redis高可用模式核心 Redis高可用模式的核心是使用主从复制和自动故障转移机制来确保系统在某些节点发生故障时仍然可以正常工作。 常用的高可用架构包括Redis Sentinel模式和Redis Cluster模式,其中Sentinel模式是为了提供高可用性而专门设计的解决方案。 在Re…...
linux-----进程execl簇函数
execl函数族概述 在Linux中,execl函数族用于在一个进程中加载并执行一个新的程序,它会替换当前进程的地址空间(代码段、数据段、堆和栈等)。这个函数族包括execl、execlp、execle、execv、execvp和execvpe,它们的主要功…...
Vue + ECharts 实现山东地图展示与交互
这篇文章中,我将逐步介绍如何使用 Vue 和 ECharts 实现一个互动式的地图展示组件,其中支持返回上一层地图、点击查看不同城市的详细信息,以及根据数据动态展示不同的统计信息。 效果图:玩转山东地图:用Echarts打造交互…...
【Verilog】UDP用户原语
User-defined primitives 概述基本语法组合逻辑的UDP时序逻辑的UDPUDP 符号表 Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog 不仅定义了语法&…...
问题小记-达梦数据库报错“字符串转换出错”处理
最近遇到一个达梦数据库报错“-6111: 字符串转换出错”的问题,这个问题主要是涉及到一条sql语句的执行,在此分享下这个报错的处理过程。 问题表现为:一样的表结构和数据,执行相同的SQL,在Oracle数据库中执行正常&…...
MyBatis入门的详细应用实例
目录 MyBatis第一章:代理Dao方式的CRUD操作1. 代理Dao方式的增删改查 第二章:MyBatis参数详解1. parameterType2. resultType 第三章:SqlMapConfig.xml配置文件1. 定义properties标签的方式管理数据库的信息2. 类型别名定义 MyBatis 第一章&…...
Sequelize ORM sql 语句工具
Sequelize ORM sql 语句工具 初始化配置 Sequelize orm 配置文章落日沉溺于海 在命令行中全局安装 npm i -g sequelize-clisequelize 执行需要匹配 mysql2 对应的依赖(安装 mysql2) npm i sequelize mysql2初始化项目 sequelize init熟悉初始化项目后…...
增强LabVIEW与PLC通信稳定性
在工业自动化系统中,上位机与PLC之间的通信稳定性至关重要,尤其是在数据采集和控制任务的实时性要求较高的场景中。LabVIEW作为常用的上位机开发平台,通过合理优化通信协议、硬件接口、数据传输方式以及系统容错机制,可以大大提升…...
UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
UDP系统控制器(ShuiYX) 帮助文档 概述 本程序设计用于通过UDP协议接收指令来远程控制计算机的音量、执行特定命令和其他功能。为了确保程序正常工作,请确认防火墙和网络设置允许UDP通信,并且程序启动后会最小化到托盘图标。 命令格式及说明 音量控制…...
NK细胞杀伐功能如何实现?
在人体的免疫系统中,自然杀伐细胞(Natural Killer Cells,简称NK细胞)是一类完全自然的免疫激活力量。它们为人体提供了快速反应能力,不依赖类元的特定识别力,但能直接寻找和毁灭毒病感染细胞和肿瘤细胞。那…...
Ubuntu搭建ES8集群+加密通讯+https访问
目录 写在前面 一、前期准备 1. 创建用户和用户组 2. 修改limits.conf文件 3. 关闭操作系统swap功能 4. 调整mmap上限 二、安装ES 1.下载ES 2.配置集群间安全访问证书密钥 3.配置elasticsearch.yml 4.修改jvm.options 5.启动ES服务 6.修改密码 7.启用外部ht…...
PC寄存器(Program Counter Register)jvm
在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色。以下是对JVM中PC寄存器的详细解释: 一、定义与功能 定义: JVM中的PC寄存器,也被称为程序计数器,是对物理PC寄存器的一种抽象模拟。它用于存储当前线程所执行的字节码指令的地址,即指…...
预览和下载 (pc和微信小程序)
1.微信小程序 预览pdf 或者 图片等 //utils.js 文件//通过接口返回文件链接 打开文档 export default function previewFile({ downLinkUrl, tempFilePath }) {let url "https://" downLinkUrl.replace("http://", "").replace("https:…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
