2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得
题目
设 $ab^{-1} = x(mod \ p)$,给出 $x,p$,要求最小的 $b$,其中 $0< a < b, \ 1 < x<p,\ 3 \leq x\leq {10}^{15}$.
分析
比赛中,首先就想用扩展欧几里得解出一个可行 $b$,然后枚举 $kb \% p$ 的最小值,然后发现复杂度爆炸。
看题解,用了一种非常巧妙地方法,
$\because 0 < a=bx-pt < b$
$\therefore \frac{p}{x} < \frac{b}{t} < \frac{p}{x-1}$
按题解,这是一个经典问题,可以用辗转相除法解决。
如,对于 $\frac{a}{b} < \frac{x}{y} < \frac{c}{d}$
若 $\left \lfloor \frac{a}{b} \right \rfloor \neq \left \lfloor \frac{c}{d} \right \rfloor$,直接取 $x = \left \lfloor \frac{a}{b} \right \rfloor, y = 1$;
若 $\left \lfloor \frac{a}{b} \right \rfloor = \left \lfloor \frac{c}{d} \right \rfloor$,先统一减去整数部分,然后取倒数,即 $\frac{d}{c} < \frac{y}{x} < \frac{b}{a}$.
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
ll p, x; //q求满足a/b < x/y < c/d 的最小的x和y
void f(ll a, ll b, ll c, ll d, ll& x, ll& y)
{
ll tmp = (a+b-)/b;
if(tmp <= c/d)
{
x=tmp;
y=;
return;
} a -= b*(tmp-);
//x -= y*tmp;
c -= d*(tmp-);
f(d, c, b, a, y, x);
x += y*(tmp-);
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld%lld", &p, &x);
ll b, t;
f(p, x, p, x-, b, t);
ll a = b*x-p*t;
printf("%lld/%lld\n", a, b);
}
return ;
}
续:后来知道这种方法叫类欧几里得算法,与欧几里得相似,采用辗转相除的方法。
2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得的更多相关文章
- [2019HDU多校第五场][HDU 6626][C. geometric problem]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6626 题目大意:给出平面上六个点\(A,B,M,N,X,Y\)以及两条直线\(L1,L2\),要求在四 ...
- [2019杭电多校第五场][hdu6624]fraction
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6624 题意为求最小的b满足$a*b^{-1}\equiv x(modp)$. 把式子化简一下: $a\ ...
- 2019.02.06 bzoj2187: fraction(类欧几里得)
传送门 题意简述:多组询问,每次给出a,b,c,da,b,c,da,b,c,d,求满足ab<pq<cd\frac ab<\frac pq<\frac cdba<qp& ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 2019HDU多校第四场 Just an Old Puzzle ——八数码有解条件
理论基础 轮换与对换 概念:把 $S$ 中的元素 $i_1$ 变成 $i_2$,$i_2$ 变成 $i_3$ ... $i_k$ 又变成 $i_1$,并使 $S$ 中的其余元素保持不变的置换称为循环, ...
- hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】
题目链接 首先利用组合数学知识,枚举两人的总胜场数容易得到 这还不是卷积的形式,直接搞的话复杂度大概是O(n^2)的,肯定会TLE.但似乎和卷积有点像?想半天没想出来..多谢Q巨提醒,才知道可以用下面 ...
- 2014多校第五场1010 || HDU 4920 Matrix multiplication(矩阵乘法优化)
题目链接 题意 : 给你两个n*n的矩阵,然后两个相乘得出结果是多少. 思路 :一开始因为知道会超时所以没敢用最普通的方法做,所以一直在想要怎么处理,没想到鹏哥告诉我们后台数据是随机跑的,所以极端数据 ...
- 2014多校第五场1001 || HDU 4911 Inversion (归并求逆序数)
题目链接 题意 : 给你一个数列,可以随意交换两相邻元素,交换次数不超过k次,让你找出i < j 且ai > aj的(i,j)的对数最小是多少对. 思路 : 一开始想的很多,各种都想了,后 ...
- 2014 HDU多校弟五场J题 【矩阵乘积】
题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ...
随机推荐
- Java与计算机常识
DB2 IBM公司的数据库 Oracle Orcle的数据库 Mysql 数据库(免费) 1. jetty 小型服务器(类似于tomcat) Jetty 是一个开源的servlet ...
- homestead的创建和使用
1.下载vistualbox和vagrant并安装 2.安装了git的话就在想设置的目录或者文件夹下用git命令执行vagrant box add laravel/homestead,或者用cmd命令 ...
- 在订单服务中使用Hystrix进行熔断设置
使用Hystrix熔断(上) 在一个分布式系统里,一个服务依赖多个服务,可能存在某个服务调用失败, 比如超时.异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败, ...
- css — 权重、继承性、排版、float
目录 1. 继承性 2. css中的权重 3. 常用格式化排版 4. 浮动布局float 1. 继承性 继承性:在css有某些属性是可以继承下来,如 color,text-xxx,line-heigh ...
- 1223: 输出汉诺塔问题的盘子移动步骤(Java)
一.题目 http://acm.wust.edu.cn/problem.php?id=1223&soj=0 二.代码 import java.util.*; public class Main ...
- 一个因MySQL大小写敏感导致的问题
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 00 MYSQL对大小写敏感 见字如面,见标题知内容.你有遇到过因为MYSQL对大小写敏感而被坑的体验吗? 之前看过阿里巴 ...
- 【web】Chrome 浏览器中查看 webSocket 连接信息
1.以下代码实现一个webSocket连接,在文本输入框中输入内容,点击发送,通过服务器,返回相同的内容显示在下方. 1 <!DOCTYPE html> 2 <html lang=& ...
- Vue页面手动刷新,导航栏激活项还原到初始状态问题解决方案
场景描述:在页面中存在顶部导航和左侧导航,左侧导航和右侧内容区使用了命名视图实现,点击左侧导航的链接时,右侧内容区相应显示不同组件内容.问题:在当前链接手动刷新浏览器(例如:浏览器地址为/enterp ...
- Vue命名路由
Vue命名路由 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Xcode8 1 创建coreData的ManagedObject后,报错 linker command failed with exit code 1
Xcode8 1 创建coreData的ManagedObject后,报错 使用Xcode 8.1 创建coreData的ManagedObject后,报错. duplicate symbol OBJ ...