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,如果变量还不用全局变量的话连内存 ...
随机推荐
- Windows Terminal Preview v0.7 Release
Windows Terminal Preview v0.7 Release The following key bindings are included by default within this ...
- 《Mysql 一条 SQL 更新语句是如何执行的?(Redo log)》
一:更新流程 - 对于更新来说,也同样会根据 SQL 的执行流程进行. - - 连接器 - 连接数据库,具体的不做赘述. - 查询缓存 - 在一个表上有更新的时候,跟这个表有关的查询缓存会失效. - ...
- python day1 (afternoon)购物清单
购物清单 #顾客给出余额 #给出商品清单 #顾客挑选商品 #给出购物清单 代码: #!/usr/bin/env python#-*- coding:utf-8 -*- salary = int(inp ...
- S03_CH13_ZYNQ A9 TCP UART双核AMP例程
S03_CH13_ZYNQ A9 TCP UART双核AMP例程 13.1概述 ZYNQ中存在两个独立的ARM核,在很多应用场景中往往只需使用其中的1个核心即可.然而,对于复杂的设计,例如多任务,并行 ...
- SVM的概率输出(Platt scaling)
SVM的概率输出(Platt scaling) 2015-10-22 10:38:19 闲渔Love吉他 阅读数 8121 文章标签: Platt Scaling Calibr 更多 分类专栏: 计算 ...
- MarkdownPad2安装与破解-转载
MarkdownPad安装包下载链接链接:https://pan.baidu.com/s/1o7c4W7C2d8zCPh5z7y4IvQ提取码:e4bf 下载解压之后,找要MarkdownPad2.e ...
- (九)Activitivi5之使用 RuntimeService 设置和获取流程变量
一.案例 /** * 设置流程变量数据 */ @Test public void setVariableValues(){ RuntimeService runtimeService=processE ...
- (一)XML基础(1)
一.什么是XML? XML是指可扩展标记语言(eXtensible MarkupLanguage),它是一种标记语言.它被设计的宗旨是描述数据(XML),而非显示数据(HTML). 目前遵循的是W3C ...
- redis的下载和安装
下载 http://download.redis.io 这里我们以redis的5.0.5版本和centos7环境为基础介绍 安装 1.将下载的redis-5.0.5.tar.gz文件上传到linux上 ...
- JDBC 复习3 存取Oracle大数据 clob blob
1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...