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

2025年6月GESP(C++六级):最大因数

2025年6月GESP(C++六级):最大因数

在这里插入图片描述

题目描述

给定一棵有 10910^9109 个结点的有根树,这些结点依次以 1,2,…,1091, 2, \dots, 10^91,2,,109 编号,根结点的编号为 111。对于编号为 kkk2≤k≤1092 \leq k \leq 10^92k109)的结点,其父结点的编号为 kkk 的因数中除 kkk 以外最大的因数。

现在有 qqq 组询问,第 iii1≤i≤q1 \leq i \leq q1iq)组询问给定 xi,yix_i, y_ixi,yi,请你求出编号分别为 xi,yix_i, y_ixi,yi 的两个结点在这棵树上的距离。两个结点之间的距离是连接这两个结点的简单路径所包含的边数。

输入格式

第一行,一个正整数 qqq,表示询问组数。

接下来 qqq 行,每行两个正整数 xi,yix_i, y_ixi,yi,表示询问结点的编号。

输出格式

输出共 qqq 行,每行一个整数,表示结点 xi,yix_i, y_ixi,yi 之间的距离。

输入输出样例 #1

输入 #1

3
1 3
2 5
4 8

输出 #1

1
2
1

输入输出样例 #2

输入 #2

1
120 650

输出 #2

9

说明/提示

对于 60%60\%60% 的测试点,保证 1≤xi,yi≤10001 \leq x_i, y_i \leq 10001xi,yi1000

对于所有测试点,保证 1≤q≤10001 \leq q \leq 10001q10001≤xi,yi≤1091 \leq x_i, y_i \leq 10^91xi,yi109

题目分析

本题要求计算一棵特殊树中两个节点之间的距离。树的结构如下:

  • 根节点为1
  • 对于节点k(k ≥ 2),其父节点是k的最大真因数(即除k本身外的最大因数)

解题思路

  1. 父节点计算:对于节点x,其父节点是x的最大真因数。通过从2开始枚举到√x,找到x的最小质因数i,则x/i即为最大真因数。若未找到(x为质数),则父节点为1。
  2. 距离计算:两个节点x、y之间的距离通过以下步骤计算:
    • 不断将x和y中较大的节点上移至其父节点,直到两者相遇
    • 每次移动计数一次,总移动次数即为两节点间的距离

AC代码

#include <bits/stdc++.h>
using namespace std;int q;// 计算节点x的父节点(最大真因数)
int fa(int x) {// 从2枚举到√xfor (int i = 2; i * i <= x; i++) {if (x % i == 0) return x / i; // 找到最小质因数i,返回最大真因数x/i}// 未找到因数(x为质数),返回1return 1;
}// 计算两个节点x,y在树上的距离
int lca(int x, int y) {int ans = 0;// 当x和y不相同时循环while (x != y) {// 移动较大的节点(因为树中父节点小于子节点)if (x < y) y = fa(y); // 移动yelse x = fa(x); // 移动xans++; // 增加移动计数}return ans; // 返回总移动次数(即距离)
}int main() {cin >> q;while (q--) {int x, y;cin >> x >> y;cout << lca(x, y) << endl;}return 0;
}

代码功能解析

  1. fa(int x)
    • 功能:计算节点x的父节点
    • 实现:通过试除法找到x的最小质因数,返回对应的最大真因数
  2. lca(int x, int y)
    • 功能:计算两节点间距离
    • 实现:循环比较节点大小,较大者上移父节点,直到相遇,返回移动次数
  3. 主程序
    • 读取询问次数q
    • 对每组询问,读取节点对(x,y),输出距离计算结果

文末彩蛋:

点击查看老师的个人主页,学习csp信奥赛完整系列课程:
https://edu.csdn.net/lecturer/7901

在这里插入图片描述

http://www.dtcms.com/a/295991.html

相关文章:

  • 传染病监测(七):为什么接触模式能颠覆防控效果预测?
  • 力扣刷题844——比较含退格的字符串
  • 【C语言进阶】柔性数组
  • 电商项目_秒杀_架构升级
  • 第十八天(Linux基本命令)
  • ollama无法拉取模型导致报错
  • Spring AI 系列之二十三 - AudioModels
  • 20250724-day21
  • 自己开发VUE之web网页打包技术毕业论文——仙盟创梦IDE
  • 通过为前端项目接入GeoGebra,初步研究AI时代数学教案的生成方案
  • 深度解析:在Odoo 18中基于原生Owl框架为PWA定制功能丰富的底部导航栏
  • 后端分页接口实现
  • 在一个网页浏览器的控制台测试后端java是否支持SSE服务
  • 小旺AI截图v1.2.3版本上线,自定义快捷键全覆盖
  • 从零用java实现 小红书 springboot vue uniapp(15) 集成minio存储 支持本地和minio切换
  • Could not open JDBC Connection for transaction 问题
  • 基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
  • 卫星物联网:使用兼容 Arduino 的全新 Iridium Certus 9704 开发套件深入探索
  • 人工智能与云计算双轮驱动:元宇宙如何重构全球产业生态
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-评论用户名词云图实现
  • 亚纳米级检测!潜望式棱镜的“检测密码”,决定手机远景清晰度
  • 4G手机控车模块的核心功能与应用价值
  • 4种灵活的方法从POCO手机中删除联系人
  • 天邑TY1613_S905L3SB_安卓9-高安非-高安版-通刷-TTL线刷固件包
  • 考研初试专业分146!上岸新疆大学!信号与系统考研经验,通信考研小马哥。
  • 图机器学习(20)——欺诈交易检测算法
  • python基础:操作列表
  • 2024年ASOC SCI2区TOP,基于强化学习教与学优化算法RLPS-TLBO+风电场布局优化,深度解析+性能实测
  • 一种宏模板实现方法
  • (实用攻略)Linux操作系统(一)