洛谷题单指南-进阶数论-P1516 青蛙的约会

news/2025/9/22 17:16:35/文章来源:https://www.cnblogs.com/hackerchef/p/19105189

原题链接:https://www.luogu.com.cn/problem/P1516

题意解读:长L的环形数轴,初始A在x坐标、一次跳m米,B在y坐标、一次跳n米,问最少跳几次AB相遇。

解题思路:

1、欧几里得算法

欧几里得算法(Euclidean Algorithm),又称辗转相除法,是数学中用于求解两个正整数最大公约数(Greatest Common Divisor, GCD) 的经典算法。其核心优势在于通过 “不断用较大数除以较小数,替换原数对为‘除数’和‘余数’” 的迭代过程,快速缩小数值规模,最终得到最大公约数。

欧几里得算法的可用递归描述为:对任意非负整数a和任意整数b,gcd(a,b) = gcd(b, a mod b)

证明:

设d|a且d|b,设a = bq + r,r = a mod b,r = a - bq则有d|r,即d | a mod b,因此a、b的约数也是b、a mod b的约数;

设d|b且d|a mod b,由a = bq + a mod b则有d|a,因此b、a mod b的约数也是a、b的约数;

综上,a,b和b,a mod b的约数相同,则最大公约数也一样,因此gcd(a,b) = gcd(b, a mod b)

代码:

int gcd(int a, int b)
{return b == 0 ? a : gcd(b, a % b);
}

2、扩展欧几里得算法

扩展欧几里得算法(Extended Euclidean Algorithm)是欧几里得算法(辗转相除法)的延伸,其核心价值不仅在于计算两个整数的最大公约数(gcd),更在于能找到满足裴蜀定理的一组整数解 —— 即对任意整数 ab,存在整数 xy 使得 ax + by = gcd(a, b)

其过程为:

设𝑎𝑥1 +𝑏𝑦1 = gcd(𝑎,𝑏),𝑏𝑥2 +(𝑎 mod 𝑏)𝑦2 = gcd(𝑏,𝑎 mod 𝑏)

由欧几里得定理可知:gcd(𝑎,𝑏) = gcd(𝑏,𝑎 mod 𝑏)

所以 𝑎𝑥1 +𝑏𝑦1 = 𝑏𝑥2 + (𝑎 mod 𝑏)𝑦2

又因为 𝑎 mod 𝑏 = 𝑎 − (⌊𝑎/𝑏⌋ ×𝑏)

所以 𝑎𝑥1 +𝑏𝑦1 = 𝑏𝑥2 +(𝑎 −(⌊𝑎/𝑏⌋ × 𝑏))𝑦2

𝑎𝑥1 +𝑏𝑦1 = 𝑎𝑦2 +𝑏𝑥2 −⌊𝑎/𝑏⌋ × 𝑏𝑦2 =𝑎𝑦2 + 𝑏(𝑥2 −⌊𝑎/𝑏⌋𝑦2)

所以 𝑥1 =𝑦2, 𝑦1 = 𝑥2 −⌊𝑎/𝑏⌋𝑦2

在递归过程中,x1,y1是上一层的x、y,x2、y2是下一层的x、y,当a mod b ==0时,此时的b即最大公约数,那么bx+0y=b,因此x=1 y=0是递归出口。

代码:

int exgcd(int a, int b, int &x, int &y)
{if(b == 0){x = 1;y = 0;return a;}int d = exgcd(b, a % b, y, x); //递归时上一层的x1=下一层的y2,上一层的y1 = 下一层的x2y -= a / b * x; //此时x1是下一层的y2,y1是下一层的x2,这句话的意思就是y1 = x2 - a / b * y2return d;
}

3、二元一次不定方程的通解

对于a、b是正整数,ax + by = c有解的条件是d | c,其中d = gcd(a, b),通过扩展欧几里得算法可以求得ax + by = d的解,设为x0,y0

那么ax + bx = c一个特解就是x1 = x0 * c / d, y1 = y0 * c / d

设k为任意整数,则ax + bx = c的通解可以表示为:x = x1 + (b / d) * k,y = y1 - (a / d) * k

要解x的最小正整数解,用(x1 % (b/d) + (b/d)) % (b/d)即可。

3、问题分析

经过时间t之后,A所在的位置变成(mt + x) % L,B所在位置变成(nt + y) % L

A、B要相遇,必须满足(mt + x) % L = (nt + y) % L,用同余表示即mt + x ≡ nt + y (mod L),

令设整数s,有mt + x + Ls = nt + y

进而(m - n)t + Ls = y - x

另a = |m - n|, b = L, c = (m > n ? 1 : -1) * (y - x)

求方程at + bs = c中t的最小正整数解即可

扩展欧几里得算法即可解决。

100分代码:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
LL x, y, m, n, L;LL exgcd(LL a, LL b, LL &x, LL &y)
{if(b == 0){x = 1, y = 0;return a;}LL d = exgcd(b, a % b, y, x);y -= a / b * x;return d;
}int main()
{cin >> x >> y >> m >> n >> L;LL a = abs(m - n), b = L, c = (m > n ? 1 : -1) * (y - x);LL s, t;LL d = exgcd(a, b, t, s);if(c % d){cout << "Impossible";return 0;}t *= (c / d);cout << (t % (b / d) + (b / d)) % (b / d);return 0;
}

 

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

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

相关文章

electron中的几个概念

这里记录一下,学习用┌─────────────────────────────────────────┐│ 主进程 (Main Process) ││ - main.js ││ …

仿网站wordpress 整合ckplayer

前言 JSON 平时大家都会用到&#xff0c;都不陌生&#xff0c;今天就一起来实现一个 JSON 的可视化工具。 大概长成下面的样子&#xff1a; 树展示 相比于现有的一些 JSON 格式化工具&#xff0c;我们今天制作的这个小工具会把 JSON 转为树去表示。其中&#xff1a; 橙色标…

电子商务网站建设阶段连云港网站建设推广

MySQL&#xff1a;Explain执行计划 使用explain关键字可以模拟优化器执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的&#xff0c;分析你的查询语句或是表结构的性能瓶颈。 认识explain EXPLAIN SELECT * FROM user_info i LEFT JOIN user_grade g on i.id …

网站推广塔山双喜wordpress评论qq

计算机是现代社会中不可或缺的工具&#xff0c;而CPU&#xff08;中央处理器&#xff09;则是计算机的核心组件。CPU负责执行指令和控制计算机的各种操作&#xff0c;它的性能直接影响着计算机的速度和效率。 1. CPU的基本结构 CPU通常由以下几个主要组成部分构成&#xff1a…

外贸网站推广策划wordpress墨客吧

一、什么是Hooks函数&#xff1f; 想象一下&#xff0c;你在做饭&#xff0c;有一些调料你经常会用到&#xff0c;比如盐、酱油和辣椒。每次做饭时&#xff0c;你都会从柜子里拿出这些调料。如果你每次用完都把它们随便放在厨房的某个角落&#xff0c;下次做饭时就可能找不到它…

学校网站怎么做的好坏浙江网架公司

v-viewer简介 v-viewer 是一个 Vue 组件&#xff0c;用于显示图片和其他媒体内容的全屏查看器。它基于 Viewer.js&#xff0c;一个强大的图片查看库。 以下是一个基本的使用示例&#xff1a; <template><div v-viewer><img src"image1.jpg" />&…

做维修家具广告在哪个网站好北京市网站维护公司

初识国际化和ResourceBundle这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念&#xff0c;两者都是一起出现的。可以说&#xff0c;国际化的目的就是为了实现本地化&#xff0c;详细的介绍可以看本文的最后。比如对于“取消”&#xff0c;中文中我们使用“…

传统网站有没有建设必要性长春搜索排名提升

首发公号&#xff1a;Rand_cs 共享内核空间 我们常说&#xff0c;每个进程都有自己的虚拟地址空间&#xff0c;但其中内核部分是共享的。 这就有个问题&#xff0c;如何共享的&#xff1f; 系统启动时创建了一张内核页表&#xff0c;里面记录着内核地址空间与物理地址空间的…

网站能获取访问者关键词搜索引擎又称为

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

详细介绍:PHP基础-数据类型(第九天)

详细介绍:PHP基础-数据类型(第九天)2025-09-22 17:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…

实用指南:告别IP被封!分布式爬虫的“隐身”与“分身”术

实用指南:告别IP被封!分布式爬虫的“隐身”与“分身”术pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

从 “盲调” 到 “精准优化”:SQL Server 表统计信息实战指南

本文核心要旨在于:SQL Server 表统计信息作为元数据对象,宛如数据分布的 "指南针",精准存储着数据分布信息,为查询优化器提供关键依据,助力其生成高效的查询执行计划。在维护方面,统计信息更新有手动与…

别的摄像机都能国标GB28181注册上,就这台海康摄像机注册不上来,国标配置都反复检查没问题

别的摄像机都能国标GB28181注册上,就这台海康摄像机注册不上来,国标配置都反复检查没问题先看看下午EasyGBS群里用户提到的问题,我先大概描述一下,用户说有一台海康的摄像机IPC国标注册不到EasyGBS,另一台可以,区…

保护眼睛小程序

import wx import time from datetime import datetime, timedelta class MyFrame(wx.Frame): def init(self): super().init(None, title=用眼提醒, size=wx.Size(800, 600)) self.SetWindowStyle(wx.STAY_ON_TOP)# 创…

公司有网站域名 如何做网站传媒公司做网站编辑 如何

同一个浏览器登录不同账号session一致&#xff0c;这就导致后面登录的用户数据会把前面登录的用户数据覆盖掉&#xff0c;这个问题很常见&#xff0c;当前我这边解决的就是同一个浏览器不同窗口只能登录一个用户&#xff0c;解决方案如下&#xff1a; 1、在App.vue中监听本地数…

石家庄网站外包有多少种做网站后台程序

Java 集合交集判断 一. 使用 retainAll()方法二. 使用 removeAll() 方法与判断集合大小三. 使用 Stream 流式处理四. 使用 Collections.disjoint() 方法五. 总结六. 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续…

视频网站做板块栏目手机大全网站

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-31&#xff09;山西电力市场全天平均日前电价为445.23元/MWh。其中&#xff0c;最高日前电价为791.27元/MWh&#xff0c;预计出现在08:15。最低日前电价为270.52元/MWh&#xff0c;预计…

做的网站上传到服务器专业制作效果图公司

今天给大家分享的题目是leetcode242有效的字母异位词 我们先看题目描述&#xff1a; Chatgpt中对于字母异位词的解释如下&#xff1a; 字母异位词是指由相同的字母组成但顺序不同的单词。换句话说&#xff0c;字母异位词具有相同的字母&#xff0c;只是排列顺序不同。 简单的将…

备案可以不关闭网站吗科技设计网站建设

排序思想掌握 前言&#xff1a; 开发当中为什么会用到算法&#xff1f;或者说为什么需要算法与数据结构等&#xff1f; 算法思想可以帮助我们优化程序的性能&#xff0c;例如减少时间与空间复杂度&#xff0c;从而使程序更快、更有效地运行。在数据分析领域&#xff0c;算法思想…

做模具做什么网站做外贸的人经常用什么网站

Zookeeper 架构理解 整体架构 Follower server 可以直接处理读请求&#xff0c;但不能直接处理写请求。写请求只能转发给 leader server 进行处理。最终所有的写请求在 leader server 端串行执行。&#xff08;因为分布式环境下永远无法精确地确认不同服务器不同事件发生的先后…