华为机试 - 勾股数元组

news2025/8/11 14:08:32

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

如果3个正整数(a,b,c)满足a^2 + b^2 = c^2的关系,则称(a,b,c)为勾股数(著名的勾三股四弦五),

为了探索勾股数的规律,我们定义如果勾股数(a,b,c)之间两两互质(即a与b,a与c,b与c之间均互质,没有公约数),则其为勾股数元组(例如(3,4,5)是勾股数元组,(6,8,10)则不是勾股数元组)。

请求出给定范围[N,M]内,所有的勾股数元组。

输入描述

起始范围N,1 <= N <= 10000

结束范围M,N < M <= 10000

输出描述

1. a,b,c请保证a < b < c,输出格式:a b c;

2. 多组勾股数元组请按照a升序,b升序,最后c升序的方式排序输出;

3. 给定范围中如果找不到勾股数元组时,输出”NA“。

用例

输入

1

20

输出3 4 5
5 12 13
8 15 17
说明

[1,20]范围内勾股数有:(3 4 5),(5 12 13),(6 8 10),(8 15 17),(9 12 15),(12 16 20);

其中,满足(a,b,c)之间两两互质的勾股数元组有:(3 4 5),(5 12 13),(8 15 17);

按输出描述中顺序要求输出结果。

输入

5

10

输出NA
说明

[5,10]范围内勾股数有:(6 8 10);

其中,没有满足(a,b,c)之间两两互质的勾股数元组;

给定范围中找不到勾股数元组,输出”NA“

题目解析

本题首先需要找出给定区间内的所有勾股数,当找出勾股数后,继续判断勾股数两两之间是否互质,若否,则丢弃,若是,则保留。

最终保留的就是勾股数元组。

因此本题难点有二:1、如何找出所有勾股数; 2、如何判断两个数互质

关于1,我们可以先求出区间[n,m]的所有数的平方,缓存到一个数组arr中,然后对该数组进行双重for遍历,外层遍历所有元素arr[i],内层遍历i之后的每一个元素arr[j],我们求arr[i]+arr[j]的和sum,看arr中是否包含sum元素,若是,则就得到一组勾股数sqrt(arr[i])、sqrt(arr[j])、sqrt(sum)。

按照上面逻辑求得所有勾股数。

之后,我们可以根据辗转相除法判断两个数是否互质,比如求9和12是否互质,以及求47和18是否互质。

我们只需要用

a % b 得到一个 mod

然后将

a <= b

b <= mod

如果进行到b===0时,则看此时a的值,若a===1,则说明初始时的a,b互质,否则就有最大公约数结束时的a。

如下图所示:

 

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 2) {
    const [n, m] = lines.map(Number);

    getResult(n, m);

    lines.length = 0;
  }
});

function getResult(n, m) {
  const arr = [];

  for (let i = n; i <= m; i++) {
    arr.push(i * i);
  }

  const set = new Set(arr);

  const res = [];
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      /* 判断勾股数 a^2 + b^2 = c^2 */
      const sum = arr[i] + arr[j];
      if (set.has(sum)) {
        res.push([Math.sqrt(arr[i]), Math.sqrt(arr[j]), Math.sqrt(sum)]);
      }
    }
  }

  const ans = res.filter((group) => {
    const [a, b, c] = group;
    return (
      isRelativePrime(a, b) || isRelativePrime(a, c) || isRelativePrime(b, c)
    );
  });

  if (!ans.length) return console.log("NA");

  ans.forEach((g) => console.log(g.join(" ")));
}

/* 判断两个数是否互质,辗转相除 */
function isRelativePrime(x, y) {
  while (y > 0) {
    let mod = x % y;
    x = y;
    y = mod;
  }

  return x === 1;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 检索定时任务

概述 应用经常需要添加检索功能&#xff0c;开源的 ElasticSearch 是目前全文搜索引擎的首选。他可以快速的存储、搜索和分析海量数据。Spring Boot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。 Elasticsearch是一个分布式搜索服务&#xff0c;提…

iwebsec靶场搭建

iwebsec靶场可以通过两种方法进行渗透。 iwebsec靶场简介 第一种是在线靶场&#xff1a;http://www.iwebsec.com:81/ 第二种是本地搭建&#xff1a;目前可以通过两种方法搭建&#xff0c;一种是虚拟机绿色版解压即用&#xff0c;另外一种则是通过docker安装&#xff0c;也是此…

智慧港口解决方案-最新全套文件

智慧港口解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧**全套最新解决方案合集一、建设背景 智慧港口是随着时代进步发展起来的一种现代港口运输的新业态&#xff0c;它是以现代化基础设施为基础&#xff0c;促使大数据、云计算、物联网、移动互…

Ansible Automation Platform - 保护 Playbook 中的敏感内容

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 文章目录AAP 保护 Playbook 敏感信息的方法使用 ansible-vault 保护 Playbook 中的敏感信息使用AAP的凭证保护访问通用目标的关键信息场景1场景2使用令牌访问 AAPAAP 保护 Playbook 敏感信息的方法 在上一篇《Ansible Au…

【ES笔记01】ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作

这篇文章&#xff0c;主要介绍ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作。 目录 一、索引index相关操作 1.1、创建索引 1.2、查询索引 1.3、查询所有索引 1.4、删除索引 二、文档doc相关操作 2.1、创建文档 2.2、更新文档 &am…

基于JSP的敬老院信息管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86467170 主要使用技术 ServletJSPCSSJSMysql 功能介绍 系统管理员用户功能介绍&#xff1a; 密码信息管理&#xff1a;修改个人账号密码&#xff1b; 系统用户管理&#xff1a;可以对系统…

【爬虫进阶】易班登录加密逆向

目录前言分析代码过程結果完整代码前言 demo比较简单&#xff0c;逆向难点&#xff1a;rsa加密&#xff0c;图片验证码 分析 我们模拟登录&#xff0c;请求一下 红框内是我们提交的参数&#xff0c;password看上去应该是rsa加密&#xff0c;captcha是验证码&#xff0c;key…

GO面试一定要看看这些面试题

Go核心特性 1.goroutine 协程是用户态轻量级线程&#xff0c;它是线程调度的基本单位。 使用者分配足够多的任务&#xff0c;系统能自动帮助使用者把任务分配到 CPU 上&#xff0c;让这些任务尽量并发运作。这种机制在 Go语言中被称为 goroutine&#xff08;协程&#xff09…

【javaEE】网络原理(网络层)

努力经营当下&#xff0c;直至未来明朗 文章目录前言一、网络层简述【IP协议】THINK前言 一个人最大的痛苦来源于对自己无能的愤怒 Hi&#xff0c;这里是不想秃头的宝贝儿&#xff01; 本文主要介绍【网络层】&#xff0c;其中最关键的就是【IP协议】。&#xff08;同样&…

【天池竞赛】心跳数据挖掘

天池学习赛 心跳数据挖掘 168分攻略 Chapter 1. 赛题解析 就如比赛界面所介绍的一般&#xff0c;这里再复述一遍 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事 —— 心跳信号分类预测。赛题以心电图心跳信号数据为背景&#xff0c;要求选手根据心电图感应数据预测…

【序列召回推荐】(task4)多兴趣召回实践:MIND(更新中)

note 阿里的序列召回MIND模型&#xff1a;引入了胶囊网络&#xff0c;将胶囊网络的动态路由算法引入到了用户的多兴趣建模上&#xff0c;通过B2I动态路由很好的从用户的原始行为序列中提取出用户的多种兴趣表征。在离线训练阶段&#xff0c;通过提出Label-Aware Attention详细…

Lifecycle 生命周期组件的那些事

引言 在2022的今天&#xff0c;AndroidX 普遍的情况下&#xff0c;JetPack Lifecycle 也早已经成为了开发中的基础设施&#xff0c;小到 View(扩展库) ,大到 Activity&#xff0c;都隐藏着它的身影&#xff0c;而了解 Lifecycle 也正是理解 JetPack 组件系列库生命感知设计的基…

D-013 蜂鸣器硬件电路设计

蜂鸣器硬件电路设计1 简介2 蜂鸣器电路设计1 简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中做发声器件。 蜂鸣器的分类&#xff1a;压电…

【ASM】字节码操作 工具类与常用类 AnalyzerAdapter初步介绍

文章目录 1.概述1.1 第一句话1.2 第二句话2. AnalyzerAdapter2.1 class info2.2 fields2.3 constructors2.4 methods2.4.1 execute方法2.4.2 return和throw2.4.3 jump2.4.4 visitFrame方法2.4.5 new和invokespecial1.概述 在上一篇文章:

创建KVM虚拟机公共镜像

手动配置kvm教程&#xff1a; https://blog.csdn.net/nvd11/article/details/127435990 但是毕竟每次创建新的虚拟机时&#xff0c;还要装一次系统比较麻烦。 打算做个公共的ubuntu镜像出来。 目标&#xff1a; NoDESCcpu数内存第一步创建虚拟机vm128g第二步创建虚拟机镜像文…

第五章《类的继承》第1节:继承的概念与实现方式

继承是面向对象最显著的一个特性,它是以已存在的类为基础定义新类的技术,新的类可以继承已有类的属性和方法,也可以增加新的类成员。 5.1.1什么是继承 在现实生活中,一类事物往往都可以划分成更小的类别。例如:“人”就是一类事物,按照人的身份和职业,可以把人划分成学…

SSTV慢速扫描的几种模式优劣对比

下面使用的图片是我自己拍摄的照片,无版权问题 原图: 扫描环境: 家中客厅,窗户打开,窗外有鸟叫和人声.模拟了介于野外和户外之间的环境 ,两部设备相隔1厘米,音量35%,所有测试下来设备未移动. Martin1 模式 : 扫描时长: 1分55秒 扫描后图片 Martin2 模式 : 扫描时长: 58秒…

Pywinauto的安装及使用

目录 1.pywinauto简单介绍 2.pywinauto的安装 3. 通过启动windows自带记事本&#xff0c;检查是否可正常使用 1.pywinauto简单介绍 pywinauto是一组用于自动化测试脚本的python模块&#xff0c;用于自动化Microsoft Windows GUI。它允许将鼠标和键盘操作发送到windows对话框…

基于JSP的企业固定资产管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86466989 主要使用技术 SpringStruts2HibernateJSPCSSJSMysql 功能介绍 固定资产管理系统是对高校固定资产的一个信息化管理系统&#xff0c;基本功能包括&#xff1a; 对固定资产的购进、…

基于遥感和GIS技术的生态承载力评价的解决方案

生态承载力的概念最早来自于生态学。1921年&#xff0c;Park和Burgess在生态学领域中首次应用了生态承载力的概念&#xff0c;即在某一特定环境条件下&#xff08;主要指生存空间、营养物质、阳光等生态因子的组合&#xff09;&#xff0c;某种个体存在数量的最高极限。生态承载…