bzoj1477 && exgcd学习笔记
exgcd
由于忘记了exgcd,这道题就没做出来。。。
exgcd的用处是求ax+by=gcd(a,b)这样方程的解
大概是这个样子的
void ext_gcd(long long a, long long b, long long &x, long long &y)
{
if(b == )
{
x = ;
y = ;
}
else
{
ext_gcd(b, a % b, y, x);
y -= x * (a / b);
}
}
证明大概是ax+by=gcd(a,b)
根据gcd的性质bx'+(a%b)y'=gcd(b,a%b)
这样就是求出了上面这个方程的解,我们要做的就是通过x',y'求出x,y
怎么求呢,就是把方程化回ax+by=gcd(a,b)的形式,由于gcd(a,b)=gcd(b,a%b),所以这样的解是相同的
bx'+(a-a/b*b)y'=c (c=gcd(b,a%b))
ay'+b(x'-a/b*y')=c
那么就有x=y',y=x'-a/b*y'
那么我们就先exgcd(b,a%b,y,x),这样求出了x',y'我们要返回x,y,由于传入了y,x,所以x=y'已经求好了,那么就是y,现在y=x',x=y',那么y=x'-a/b*y',y=y-a/b*x,然后返回就行了
边界条件是b=0,a=...,这样就是ax+by=gcd(a,b),ax+0*y=a,那么自然可以得出x=1,y=0是一组解,顺便也求出了gcd
那么这道题可以列出方程am+y-x=an (mod l),那么移一下项,得出a(m-n)=x-y (mod l),那么相当于求(m-n)*a+b*l=x-y 的最小a的解,这不就是exgcd吗?但是x-y不是gcd(m-n,l),怎么解决呢?
我们先求出一组解,(m-n)*a'+b*l=gcd(m-n,l) 设t=gcd(m-n,l)
如果(x-y)%t != 0那么就没有解,因为如果有一组解,那么左边的式子可以整除t,右边却不能,这很明显矛盾
所以我们对于(m-n)*a'+b*l=gcd(m-n,l) 设t=gcd(m-n,l)得出来的解,两边同乘以(x-y)/t就是原来的那个方程了,那么把a'和b'同时乘以(x-y)/t就得出一组a和b了,但是这不一定是最小的,于是我们要对l/t取模,至于为什么是l/t,具体是这样的
我们可以把刚才那个方程看成一个线性同余方程,那么就是ax=b (mod n)
我们求的是最小解的间隔,这个间隔能帮我们求出最小的正整数解,设这个间隔为d,那么自然a(x+d)=b (mod n)
和ax=b (mod n)减一下就是 a*d=0 (mod n),那么我们可以知道a*d是n和a的公倍数,如果想让d最小,那么a*d应该等于lcm(a,n),a*d=lcm(a,n),因为lcm(a,n)=a*n/gcd(a,n),那么就是a*d=a*n/gcd(a,n)
d=n/gcd(a,n),就是刚才那个l/t,所以这个d和l/t就是原方程解的最小周期,取模就能求出最小解
参考http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html
http://m.blog.csdn.net/LiRewriter/article/details/76762084
Ax+By=C
当C%gcd(a,b)==0有解
A,B,C不管正负
通解:x=x0+bt,y=yo-at
最小正整数解:t=b/gcd(a,b) x=(x%t+t)%t
方程ax≡c(mod b)⇔ax+by=c
求逆元:ax=1(mod b)
相当于求ax+by=1 最小正整数解:x+b*b/gcd(a,b)
#include<bits/stdc++.h>
using namespace std;
long long x, y, m, n, l;
void ext_gcd(long long a, long long b, long long &x, long long &y)
{
if(b == )
{
x = ;
y = ;
}
else
{
ext_gcd(b, a % b, y, x);
y -= x * (a / b);
}
}
int main()
{
scanf("%lld%lld%lld%lld%lld", &x, &y, &m, &n, &l);
if(m < n)
{
swap(n, m);
swap(x, y);
}
long long delta_v = m - n, delta_d = ((y - x) % l + l) % l, t = __gcd(delta_v, l), a, b;
if(delta_d % t != )
{
puts("Impossible");
return ;
}
ext_gcd(delta_v, l, a, b);
// printf("a=%lld t=%lld delta_d=%lld\n", a, t, delta_d);
l /= t;
a *= delta_d / t;
a = (a % l + l) % l;
printf("%lld", a);
return ;
}
bzoj1477 && exgcd学习笔记的更多相关文章
- 扩展欧几里得算法(exGCD)学习笔记
@(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by ...
- exgcd学习笔记
扩展欧几里得算法是当已知a和b时,求得一组x和y使得 首先,根据数论中的相关定理,解一定存在 //留坑待填 之后我们可以推一推式子 将a替换掉 展开括号 提出b,合并 且 设 现在已经将 ...
- exgcd 学习笔记
最大公约数 更相减损术:\(\gcd(x,y)=\gcd(x,y-x)(x\leq y)\). 证明: 设 \(\gcd(x,y)=k\),则 \(x=kp,y=kq,\gcd(p,q)=1\). 那 ...
- 扩展中国剩余定理 exCRT 学习笔记
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- exLucas学习笔记
exLucas学习笔记 Tags:数学 写下抛硬币和超能粒子炮改 洛谷模板代码如下 #include<iostream> #define ll long long using namesp ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- OI知识点|NOIP考点|省选考点|教程与学习笔记合集
点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分 ...
- 「ExLucas」学习笔记
「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...
随机推荐
- 重启rsyncd
systemctl restart rsyncd.service
- xmpp使用经验
IM 标准协议有XMPP\IMPP\PRIM\SIP(SIMPLE)等,其中XMPP基于XML的协议,具备了很好的扩展性(依靠XML的域名空间)并且可以建立在TLS上使用SASL认证. 1.文件比如图 ...
- [Java小程序]聊天室——Socket和ServerSocket的使用
这段小代码是因为担任Java助教给刚学习Java的本科大二的小学弟小学妹们指导,他们的实验作业就是编写一个Java聊天室客户端和服务器,为了避免出纰漏,自己事先写了一下. 客户端Ui代码: packa ...
- 洛谷 P1280 尼克的任务 (线性DP)
题意概括 线性资源分配的问题,因为空闲的时间大小看后面的时间(反正感觉这个就是个套路)所以从后往前DP. 转移方程 如果当前时刻没有工作 f[i]=f[i+1]+1 如果当前时刻有工作 f[i]=ma ...
- Python学习——字典
字典 字典是另一种可变容器模型,且可存储任意类型对象. 1.创建字典 字典由键和对应值成对组成.每个键与值之间用:隔开,每对之间逗号隔开. 每个键应当互不相同,值可以相同.若同时出现两个相同的键,则后 ...
- 1289大鱼吃小鱼(STL中栈的应用)
>>点击进入测试<< 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向 ...
- ACE in Action
ACE in Action https://cdn.xgqfrms.xyz/web-ide/index.html TinyMCE https://panjiachen.github.io/vue-el ...
- H5存储------localStorage和sessionStorage
web现在随着计算机的高速发展,客户端干的事情越来越多了,随着事情的增多,很多东西存储就不止在服务器了,本地存储越来越强大了(大神原谅我废话了
- [K/3Cloud]有关单据显示行数限制和数据导出的建议
1.针对显示行数限制: 模仿现在很流行的"查看更多"的模式,动态加载数据. 我相信这一点建议别人也提过,还请总部对此开展头脑风暴,因为在实际使用中客户总是不理解为何要限制行数,解释 ...
- J2EE 课件3 JSP标记
•JSP标记包括指令标记.动作标记和自定义标记.其中自定义标记主要讲述与Tag文件有关的Tag标记 1.指令标记page page 指令用来定义整个JSP页面的一些属性和这些属性的值,属性值用单 ...