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

LeetCode 1925 统计平方和三元组的数目

探索平方和三元组:从问题到 Java 代码实现

在数学与编程的交叉领域,常常会遇到一些有趣且富有挑战性的问题。今天,就让我们深入探讨一下 “平方和三元组” 这个有趣的话题,并使用 Java 语言来实现计算满足特定条件的平方和三元组数量的功能。

一、问题描述:

一个 平方和三元组 (a,b,c) 指的是满足 a^{2} + b^{2} = c^{2} 的 整数 三元组 ab 和 c 。给你一个整数 n ,请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。

二、什么是平方和三元组:

  平方和三元组是指满足a^{2} + b^{2} = c^{2} 的整数三元组 a,b和 c。例如,(3,4,5)就是一个著名的平方和三元组,因为3^{2}+ 4^{2} =9+16=5^{2} 。

三、代码实现

方法一:暴力解法(三重循环):

public class SquareSumTriples {public static int countTriples(int n) {//计数器int count = 0;// 遍历a的取值for (int a = 1; a <= n; a++) {// 遍历b的取值for (int b = 1; b <= n; b++) {// 遍历c的取值for (int c = 1; c <= n; c++) {// 判断是否满足平方和条件if (a * a + b * b == c * c) {count++;}}}}return count;}//主函数public static void main(String[] args) {int n = 10;//输出System.out.println("满足条件的平方和三元组数目为: " + countTriples(n));}
}

在上述代码中,countTriples 方法通过三层嵌套的 for 循环,分别对 a,b,c 在  1到 n 的范围内进行遍历。对于每一组 a,b,c 的取值,使用 if 语句判断是否满足  a^{2} + b^{2} = c^{2}  的条件,如果满足,则将计数器 count 加1 。最后,返回 count 的值,即为满足条件的平方和三元组的数目。

这种暴力解法的优点是思路简单直接,易于理解和实现。然而,它的时间复杂度为O(n^{3}) ,当 n较大时,计算量会非常庞大,效率较低。

方法二:优化后的解法

为了提高效率,我们可以对上述代码进行优化。观察到对于给定的a  和 b,c 的值是由 a 和 b 决定的,即 c=\sqrt{a^{2}+b^{2}}。因此,我们可以减少一层循环,通过计算得到 c的值,并判断其是否满足条件。以下是优化后的代码:

public class SquareSumTriplesOptimized {public static int countTriples(int n) {int count = 0;// 遍历a的取值for (int a = 1; a <= n; a++) {// 遍历b的取值for (int b = 1; b <= n; b++) {int sumOfSquares = a * a + b * b;double cDouble = Math.sqrt(sumOfSquares);int c = (int) cDouble;// 判断c是否为整数且在范围内if (cDouble == c && c >= 1 && c <= n) {count++;}}}return count;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入整数n: ");int n = scanner.nextInt();System.out.println("满足条件的平方和三元组数目为: " + countTriples(n));scanner.close();}
}

在优化后的代码中,countTriples 方法使用两层嵌套的 for 循环遍历a和b的取值。对于每一组 a 和 b,先计算出它们的平方和 sumOfSquares,然后通过 Math.sqrt 方法计算出平方根 cDouble,并将其转换为整数 c。接着,通过判断 cDouble == c 来确定 c 是否为整数,以及判断 c 是否在1到 n的范围内。如果满足条件,则将计数器 count 加 1。最后,返回 count 的值。

这种优化后的解法时间复杂度为 O(n^{2}),相比暴力解法,效率得到了显著提高。

四、总结

通过对平方和三元组问题的探讨和 Java 代码实现,我们看到了不同解法在效率上的差异。在实际编程中,当面对类似问题时,我们应该思考如何优化算法,以提高程序的性能。暴力解法虽然简单直接,但在处理大规模数据时可能会遇到性能瓶颈。而通过对问题的深入分析,找到其中的规律和优化点,能够帮助我们设计出更高效的算法。希望这篇博客能够帮助读者更好地理解平方和三元组问题以及相关的编程技巧,在数学与编程的学习道路上更进一步。

以上就是关于平方和三元组问题的完整博客内容,你可以根据实际情况进行调整和修改。如果还有其他问题,欢迎随时交流。

相关文章:

LeetCode 1925 统计平方和三元组的数目

探索平方和三元组&#xff1a;从问题到 Java 代码实现 在数学与编程的交叉领域&#xff0c;常常会遇到一些有趣且富有挑战性的问题。今天&#xff0c;就让我们深入探讨一下 “平方和三元组” 这个有趣的话题&#xff0c;并使用 Java 语言来实现计算满足特定条件的平方和三元组…...

java开发入门学习三-二进制与其他进制

常见的进制 常用的进制有二进制&#xff0c;八进制&#xff0c;十进制&#xff0c;十六进制。而我们最熟悉的是十进制&#xff0c;他们分别是怎么表达的呢&#xff1f; 定义不同的进制&#xff0c;写法不同 二进制&#xff08;Binary&#xff09;&#xff1a; 使用前缀 0b 或…...

C/S软件授权注册系统(Winform+WebApi+.NET8+EFCore版)

适用软件&#xff1a;C/S系统、Winform桌面应用软件。 运行平台&#xff1a;Windows .NETCore&#xff0c;.NET8 开发工具&#xff1a;Visual Studio 2022&#xff0c;C#语言 数据库&#xff1a;Microsoft SQLServer 2012&#xff0c;Oracle 21c&#xff0c;MySQL8&#xf…...

Linux —— 管理进程

一、查看进程 运行态&#xff08;Running&#xff09; 定义&#xff1a;处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中&#xff0c;同一时刻只有一个进程处于运行态&#xff1b;在多 CPU 或多核系统中&#xff0c;可能有多个进程同时处于运行态。示例&#xff1a; 当…...

Diffusino Policy学习note

Diffusion Policy—基于扩散模型的机器人动作生成策略 - 知乎 建议看看&#xff0c;感觉普通实验室复现不了这种工作。复现了也没有太大扩展的意义。 Diffusion Policy 是监督学习吗 Diffusion Policy 通常被视为一种基于监督学习的方法&#xff0c;但它的实际训练过程可能结…...

【Python】*args和**kwargs

【Python】*args和**kwargs 一、*args: 接收不定数量的位置参数示例1&#xff1a;简单的加法计算器示例2&#xff1a;转发参数给另一个函数 二、**kwargs: 接收不定数量的关键字参数示例3&#xff1a;创建用户配置文件示例4&#xff1a;合并多个字典 三、组合使用*args和**kwar…...

使用正则表达式提取PDF文件页数的实现方案

文章目录 背景介绍实现原理代码实现1. 基础函数结构2. 页数提取逻辑3. 使用示例 正则表达式解析优点与局限性优点局限性 错误处理建议性能优化建议最佳实践建议总结参考资源 背景介绍 在Web应用开发中,我们经常需要获取上传PDF文件的页数信息。虽然可以使用pdf.js等第三方库,但…...

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言&#xff1a; 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果&#xff0c;可以使RecyclerView的边缘在滚动时逐渐淡出或淡入&#xff0c;以提升用户体验。 2.Recyclerview属性&#xff1a; 2.1、requiresFading…...

springboot443旅游管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大&#xff0c;容错率低&#…...

利用git上传项目到GitHub

GitHub是基于git实现的代码托管。git是目前最好用的版本控制系统了&#xff0c;非常受欢迎&#xff0c;比之svn更好。 GitHub可以免费使用&#xff0c;并且快速稳定。 利用GitHub&#xff0c;你可以将项目存档&#xff0c;与其他人分享交流&#xff0c;并让其他开发者帮助你一…...

Rust之抽空学习系列(四)—— 编程通用概念(下)

Rust之抽空学习系列&#xff08;四&#xff09;—— 编程通用概念&#xff08;下&#xff09; 1、函数 函数用来对功能逻辑进行封装&#xff0c;能够增强复用、提高代码的可读 以下是函数的主要组成部分&#xff1a; 名称参数返回类型函数体 1.1、函数名称 在Rust中&…...

K-Means 聚类:数据挖掘的瑞士军刀

引言 在数据科学领域&#xff0c;聚类算法是一种非常重要的无监督学习方法&#xff0c;它能够帮助我们发现数据中的自然分组或模式。其中&#xff0c;K-Means 聚类算法因其简单高效而成为最常用的聚类算法之一。无论是市场细分、社交网络分析&#xff0c;还是图像分割等领域&a…...

项目练习:若依-前端项目的目录结构介绍

文章目录 一、目录截图二、目录讲解 一、目录截图 二、目录讲解 1、首先&#xff0c;我们可以看到&#xff0c;这个VUE项目&#xff0c;只有一个App.vue&#xff0c;所以&#xff0c;它是一个单页面系统。 这个App.vue是根组件&#xff0c;root组件。 2、public目录 在Vue 3.…...

知网研学 | 知网文献(CAJ+PDF)批量下载

知网文献&#xff08;CAJPDF&#xff09;批量下载 一、知网研学安装二、插件及脚本安装三、CAJ批量下载四、脚本下载及PDF批量下载浏览器取消拦截窗口 一、知网研学安装 批量下载知网文件&#xff0c;格式为es6文件&#xff0c;需使用知网研学软件打开&#xff0c;故需先安装该…...

设计模式期末复习

一、设计模式的概念以及分类 二、设计模式的主题和意图 三、面向对象程序设计原则&#xff0c;记住名字&#xff0c;还要理解它的使用场景以及如何用&#xff1f; 四、松耦合、紧耦合、强关联、弱关联、静态复用、动态复用的概念&#xff0c;还有静态委派&#xff0c;动态委…...

CentOS7源码编译安装nginx+php+mysql

1.安装nginx 安装依赖 yum -y install gcc gcc-c wget automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl openssl-devel 创建一个不能登录的nginx运行用户 groupadd www-data useradd -s /sbin/nologin -g www-d…...

linux CentOS系统上卸载docker

一、停止Docker服务 首先&#xff0c;需要停止Docker服务。使用systemctl命令来停止Docker服务&#xff1a; bash复制代码sudo systemctl stop docker二、卸载Docker软件包 接下来&#xff0c;使用CentOS的包管理器yum来卸载Docker软件包。根据安装的Docker版本和组件&#…...

css中相对定位的应用场景

元素位置微调 文本与图标组合微调&#xff1a;在网页设计中&#xff0c;经常会有文本和图标的组合&#xff0c;比如一个带有搜索图标的搜索框。可以使用相对定位来微调图标在搜索框内的位置。例如&#xff0c;有以下HTML结构&#xff1a; <input type"text" class…...

Android 获取屏幕物理尺寸

注&#xff1a;编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view &#xff0c;对 view 显示的位置要求比较精确&#xff0c;通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…...

C缺陷与陷阱 — 8 编译与链接

目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…...

PIPAL数据集实战:如何用Elo评分系统提升图像质量评估的准确性

PIPAL数据集实战&#xff1a;如何用Elo评分系统提升图像质量评估的准确性 在计算机视觉领域&#xff0c;图像质量评估&#xff08;IQA&#xff09;一直是算法研发的关键环节。随着生成对抗网络&#xff08;GAN&#xff09;等技术的突破&#xff0c;传统IQA方法逐渐暴露出局限性…...

Qwen3.5-9B镜像免配置实战:Docker化迁移与端口映射最佳实践

Qwen3.5-9B镜像免配置实战&#xff1a;Docker化迁移与端口映射最佳实践 1. 项目概述 Qwen3.5-9B是一个拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解&#xff08;图文输入&#xff09;和长上下文处理&#xff…...

PyTorch实战:从零构建支持向量机进行图像二分类

1. 支持向量机与图像分类的奇妙碰撞 第一次听说要用支持向量机(SVM)做图像分类时&#xff0c;我脑子里立刻浮现出两个问号&#xff1a;这个传统机器学习算法能处理图像数据吗&#xff1f;为什么要用PyTorch实现而不是直接用scikit-learn&#xff1f;直到亲手实现了整个流程&…...

Proteus 8实战:手把手教你搭建ATmega16流水灯仿真,并联动真实代码调试

Proteus 8实战&#xff1a;从零构建ATmega16流水灯仿真系统 在嵌入式开发的学习路径上&#xff0c;仿真工具的价值常常被低估。许多开发者习惯直接上手物理硬件&#xff0c;却在遇到问题时陷入漫长的调试循环。Proteus 8提供的虚拟实验室环境&#xff0c;恰好填补了从理论到实践…...

河海大学材料科学与工程及材料与化工专业考研复试资料(含《材料分析方法》笔试专项)

温馨提示&#xff1a;文末有联系方式河海大学材料类考研复试资料全面升级 本套资料专为报考河海大学材料科学与工程、材料与化工两个硕士专业的考生设计&#xff0c;聚焦复试核心笔试科目——《材料分析方法》&#xff0c;助力精准高效备考。由2025届一志愿录取考生权威整理 所…...

Qwen2.5-VL图文助手体验:RTX 4090极速推理,支持对话历史和一键清空

Qwen2.5-VL图文助手体验&#xff1a;RTX 4090极速推理&#xff0c;支持对话历史和一键清空 如果你手头有一张RTX 4090显卡&#xff0c;想找一个能看懂图片、能聊天、还能帮你处理各种视觉任务的本地AI助手&#xff0c;那么今天要聊的这个工具&#xff0c;你可能会很感兴趣。 …...

告别台式机没麦克风的尴尬:用SonoBus+VB-Cable把手机秒变无线麦(保姆级配置)

台式机零成本无线麦克风方案&#xff1a;SonoBus与VB-Cable实战指南 你是否遇到过这样的尴尬时刻——台式电脑突然需要语音沟通&#xff0c;却发现没有麦克风&#xff1f;无论是紧急会议、游戏开黑还是直播互动&#xff0c;这种硬件缺失带来的困扰可能让你措手不及。本文将介绍…...

SGMICRO圣邦微 SGM803B-JXN3G/TR SOT-23-3 监控和复位芯片

特性 适用于MAX803/MAX809/MAX810和ADM803/ADM809/ADM810的卓越升级版 高精度固定检测选项:3V、3.3V和5V 低供电电流:300nA(典型值)上电复位脉冲宽度:150毫秒(最小值) 复位输出选项: 开漏nRESET输出(SGM803B)推挽nRESET输出(SGM809B) . . 推挽复位输出(SGM810B)复位有效电压低至…...

SpringBoot + MongoDB 5分钟快速集成:从0到1实操指南

目录 MongoDB‌ 快速集成 常用API MongoDB‌ MongoDB‌ 是一个基于分布式文件存储的‌文档型数据库‌&#xff0c;属于 NoSQL 数据库中最接近关系型数据库的产品&#xff0c;旨在为 Web 应用提供高性能、高可用和可扩展的数据存储解决方案 。 MongoDB以灵活的无模式文档模型…...

消费增值生态:从规则设计到商业价值实现

还在为用户复购低、留存弱、平台难长效而困扰&#xff1f;当多数商家还困在传统经营思路里止步不前&#xff0c;一套依托真实消费、贴合政策导向的增值生态已然崛起。它以合规为底、以价值为核、以闭环为骨架&#xff0c;正在重新定义平台与商家的增长逻辑&#xff0c;成为数字…...