模板—扩展GCD*2
有必要重新学一下扩展GCD emmmm。
主要是扩展GCD求解线性同余方程$ax≡b (mod p)$。
1.方程有解的充分必要条件:b%gcd(a,p)=0。
证明:
- $ax-py=b$
- 由于求解整数解,ax是gcd(a,p)的整数倍,py也是,所以b是gcd(a,p)的整数倍。
2.扩展GCD模板
int exgcd(int a,int b,int &x,int &y)
{
if(b==0){x=1,y=0;return a;}//注意x,y的赋值。
int gcd=exgcd(b,a%b,x,y),t=x;
x=y;y=t-a/b*y;
return gcd;
}
3.求解线性同余方程:
扩展欧几里得可以求解形如$ax-py=b$的解。
方程可化为$ax≡b (mod p)$,注意b和p的位置。
令t=gcd(a,p)。方程可化为$\frac {a}{t}x-\frac{p}{t}y=\frac{b}{t}$。exgcd求出$\frac {a}{t}x-\frac{p}{t}y=1$的一组特解x,y。$x*=b/t,y*=b/t$即可求出一组解。
而要求最小整数解,可以发现如果x减p,y加a等式仍然成立,所以最小整数解为(x%p+p)%p.
int GCD(int a,int b){return !b?a:GCD(b,a%b);}
int exgcd(int a,int b,int &x,int &y)
{
if(b==0){x=1,y=0;return a;}
int gcd=exgcd(b,a%b,x,y),t=x;
x=y;y=t-a/b*y;
return gcd;
}
int fcc(int a,int b,int p)
{
int x,y,t=GCD(a,p);
if(b%t)return -1;
int tem=b/t;a/=t,p/=t;
exgcd(a,p,x,y);
x*=tem,y*=tem;
return (x%p+p)%p;
}
模板—扩展GCD*2的更多相关文章
- 模板——扩展欧几里得算法(求ax+by=gcd的解)
Bryce1010模板 /**** *扩展欧几里得算法 *返回d=gcd(a,b),和对应等式ax+by=d中的x,y */ long long extend_gcd(long long a,long ...
- poj 1061 青蛙的约会(扩展gcd)
题目链接 题意:两只青蛙从数轴正方向跑,给出各自所在位置, 和数轴长度,和各自一次跳跃的步数,问最少多少步能相遇. 分析:(x+m*t) - (y+n*t) = p * L;(t是跳的次数,L是a青蛙 ...
- VS自定义项目模板:[2]创建VSIX项目模板扩展
VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...
- UESTC 288 青蛙的约会 扩展GCD
设两只青蛙跳了t步,则此时A的坐标:x+mt,B的坐标:y+nt.要使的他们在同一点,则要满足: x+mt - (y+nt) = kL (p是整数) 化成: (n-m)t + kL = x-y (L ...
- Poj 1061 青蛙的约会(扩展GCD)
题目链接:http://poj.org/problem?id=1061 解题报告:两只青蛙在地球的同一条纬度线上,选取一个点位坐标轴原点,所以现在他们都在同一个首尾相连的坐标轴上,那么他们现在的位置分 ...
- 2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)
题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展g ...
- BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS
BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...
- 扩展gcd算法
扩展gcd算法 神tm ×度搜索exgcd 打到exg的时候出来ex咖喱棒... 球方程\(ax+by=\gcd(a,b)\)的一个解 如果\(b=0\),那么\(\gcd(a,b)=a\),取\(x ...
- 扩展gcd codevs 1200 同余方程
codevs 1200 同余方程 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 求关 ...
随机推荐
- H5C3--background中cover,背景样式,提升响应区域+精灵图的使用
一.cover的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Eular质数筛法
小Hi:我们可以知道,任意一个正整数k,若k≥2,则k可以表示成若干个质数相乘的形式.Eratosthenes筛法中,在枚举k的每一个质因子时,我们都计算了一次k,从而造成了冗余.因此在改进算法中,只 ...
- mysql基础记录
1. 概念介绍 数据库:专门存储数据,存储数据的仓库,同时提供了对数据的操作方法,增删改查的方法 事务 事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个 ...
- XtraBackup构建MySQL主从环境的方法
环境:HE3主库,HE1从库HE1:192.168.1.248HE3:192.168.1.250从库my.cnf加入以下参数并重启数据库:read_only=1log_slave_updates=1( ...
- MySQL Daemon failed to start错误解决办法是什么呢?
首先我尝试用命令:service mysql start 来启动服务,但是提示: MySQL Daemon failed to start 一开始出现这个问题我很方,然后开始查,说什么的都有,然后看到 ...
- SQL竖表转横表Json数据
1.数据准备 create table Vertical( Id int , ProjectName varchar(20), ProjectValue int ) insert into ...
- opencv 图像基本操作
目录:读取图像,获取属性信息,图像ROI,图像通道的拆分和合并 1. 读取图像 像素值返回:直接使用坐标即可获得, 修改像素值:直接通过坐标进行赋值 能用矩阵操作,便用,使用numpy中的array ...
- 【JZOJ3623】【SDOI2014】数表(table) 树状数组+离线+莫比乌斯反演
题面 100 \[ Ans=\sum_{i=1}^n\sum_{j=1}^mg(gcd(i,j)) \] 其中, \[ g(d)=\sum_{i|d}i \] 我们注意到\(gcd(i,j)\)最多有 ...
- 【JZOJ3216】【SDOI2013】淘金
╰( ̄▽ ̄)╭ 小 Z在玩一个 叫做<淘金者>的游戏.游戏的世界是一个 二维坐标 .X轴.Y轴坐标范围均为1..N.初始的时候,所有的整数坐标点上均有一块金子,共 N*N 块. 一阵风吹过 ...
- 记UWP开发——多线程操作/并发操作中的坑
一切都要从新版风车动漫UWP的图片缓存功能说起. 起因便是风车动漫官网的番剧更新都很慢,所以图片更新也非常慢.在开发新版的过程中,我很简单就想到了图片多次重复下载导致的资源浪费问题. 所以我给app加 ...