Luogu P10869 LCMs 题解 [ 黄 ] [ lcm ] [ 最短路 ]

news/2024/11/16 0:18:18/文章来源:https://www.cnblogs.com/zhr0102/p/18548924

LCMs:很好的数论和构造题。

显然我们不可以直接建图跑最短路。

于是考虑分讨。

倍数关系

答案显然为 \(\max(a,b)\)

相等关系

答案显然为 \(0\)

\(\gcd(a,b)>1\)

我们可以先走到 \(\gcd(a,b)\) 处,再到达 \(b\),答案为 \(a+b\)

\(\gcd(a,b)=1\)

直接分讨不太好做,我们考虑用一点时间换取代码的简洁。

可以发现,我们中间会用到的点只有 \(3\) 个:\(minp_a,minp_b,2\),其中 \(minp_x\) 表示数 \(x\) 的最小质因数。

为什么要用最小的?因为既然 \(a,b\) 已经互质,所以无论如何转化到哪一步它都是互质的,我们就要尽可能减小这一步中转的代价。这就是 \(minp\) 的由来。

那么我们化为最小质因子后,就直接是两个数的积了吗?并不是,我们还可以发现这一个构造:\(minp_a \to 2 \to minp_b\)。可以让这一步的代价变为 \(minp_a\times 2+minp_b \times 2\)。并且其他数显然做这个中转点不优,因为 \(a,b\) 已经是最小质因子了。

于是选这 \(5\) 个点出来,跑 Floyd 即可。要是愿意写,写单源最短路也可以。

时间 \(O(t \sqrt {n})\)

代码

/*
1. 倍数关系,ans=max(a,b);
2. 相等关系,ans=0;
3. 互质关系,找出 a,b,minp_a,minp_b,2 这 5 个点跑最短路,因为要使分别的质因数最小(中转的代价最小),显然选其他质因数必定不优
4. 有公因数关系:走到 gcd 处,答案为 a+b;
时间 O(sqrt(n)t)
*/#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
int t;
ll d[10][10];
vector<int>g;
ll gcd(ll a,ll b)
{if(b==0)return a;return gcd(b,a%b);
}
ll lcm(ll a,ll b)
{return b/gcd(a,b)*a;
}
void floyd()
{for(int i=0;i<g.size();i++){for(int j=0;j<g.size();j++){d[i][j]=lcm(g[i],g[j]);if(i==j)d[i][j]=0;}}for(int k=0;k<g.size();k++){for(int i=0;i<g.size();i++){for(int j=0;j<g.size();j++){d[i][j]=min(d[i][j],d[i][k]+d[k][j]);}}}}
void solve()
{ll a,b;cin>>a>>b;if(a>b)swap(a,b);if(a==b)cout<<0<<'\n';else if(b%a==0)cout<<b<<'\n';else if(gcd(a,b)>1)cout<<a+b<<'\n';else{int minp_a=1,na=a;for(int i=2;i<=a/i;i++){if(na%i==0){minp_a=i;break;}}if(minp_a==1)minp_a=a;int minp_b=1,nb=b;for(int i=2;i<=b/i;i++){if(nb%i==0){minp_b=i;break;}}if(minp_b==1)minp_b=b;g.clear();g.push_back(a);g.push_back(b);g.push_back(minp_a);g.push_back(minp_b);g.push_back(2);    floyd();cout<<d[0][1]<<'\n';    }
}int main()
{//freopen("sample.in","r",stdin);//freopen("sample.out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t--)solve();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天,p105-p164总结,总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安装后,执行“python manage.py…

11/15

好讨厌现在的自己 我的能量太低了 需要不断的慰藉 我喜欢逃避 野心家,思想家,我真的sb 没有成就感 绝望绝望绝望绝望绝望今天很drama,不想说什么了,难受,以后再写 明天计划C语言5题【今天少了一道】 下午去比赛 前端考核作业【1/2】可能睡觉睡少了,不开心?洗洗睡了

团队项目4——项目冲刺-4

每日站立式会议昨天已完成的工作: 杨睿:完善社区活动模块接口 个人中心模块接口木萨江:投诉反馈页面开发 管理员管理用户相关接口巴音才次克:物业报修相关接口李佳聪:检查车位信息的删查改接口是否符合需求今天计划完成的工作: 杨睿:完善管理页面 对接个人中心接口木萨江…

团队作业4——项目冲刺5

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启腾 钟月灿1…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现二

运行环境:jdk1.8、mysql5.x、idea、maven3.5/3.5 如果环境一致 运行不起来可以右侧联系我,包运行。 功能:管理员信息数据层Mapper、宠物信息数据层Mapper、宠物领养记录信息数据层Mapper、宠物评论信息数据层Mapper、宠物评论回复信息数据层Mapper、用户信息数据层Mapper 技…

Alpha冲刺(3/14)——2024.11.14

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 编…

「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024

在人工智能和开源技术蓬勃发展的当下,AI Infra 项目正经历着日新月异的变革。从跨平台运行时到云边端 AI 基础设施,再到多模态知识助手,创新浪潮席卷而来。这些进步不仅显著提升了技术指标,也为实时音视频处理、边缘计算、大模型应用等场景开辟了新的可能性。在 RTE 2024 大…

2024-2025-1 20241305 《计算机基础与程序设计》第八周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 1、功能设计与面向对象设计 2、面向对象设计过程 3、面向对象语言三要素 4、汇编、编译、解释、执行作业正文 本博客链接教材学习…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现一

功能点:管理员信息实体类Entity、宠物信息实体类Entity、宠物领养记录信息实体类Entity、宠物评论信息实体类Entity、宠物评论回复信息实体类Entity、用户信息实体类Entity 技术点:SSM+JSP+Mysql+Bootstrap+JS+CSS 免费学习:猿来入此一、前言介绍: 免费学习:猿来入此 1.1 …

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结 作业信息 |这个作业属于哪个课程| https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |这个作业要求在哪里| https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |这个作业的目标| 功能设计与面向对象设…

项目冲刺11.15

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第七篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Latex 安装

使用的开发环境是 VSCode. Latex 在编译时需要用到宏包. 宏包到底是啥? 有啥作用? 从何处下载? Latex 软件的安装:texlive: 一次性下载所有的宏包. 磁盘需求较大, 约 7 ~ 8 G.miktex: 仅下载必要的宏包, 编译时补充下载宏包. 磁盘需求较小, 约几百 M.清华大学开源软件镜像站…