定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b)

int exgcd(int a,int b,int &x,int &y){
if(b==){x=,y=;return a;}
int d=exgcd(b,a%b,x,y);
int z=x;x=y;y=z-y*(a/b);
return d;
}

当d可以整除c时,一般方程ax+by=c的一组特解求法:

  1.求ax+by=d的特解x0,y0

  2.ax+by=c的特解为(c/d)x0,(c/d)y0

上述方程的通解:(c/d)x0+k(b/d) ,(c/d)y0-k(a/d)

乘法逆元有自然数倒数的类似性质

乘法逆元:b,m互质,并且b整除a,则存在x,有a/b = a*x(mod m),即a/b模m的结果和a*x模m的结果是相同的,这个x称为b的模m的乘法逆元,记作b^(-1) (mod m)

  可得b*b^(-1) = 1(mod m)

  那么当m是质数时,根据费马小定理,有b^(m-1)=1(mod m),那么b的逆元就是b^(m-2)

  如果只是保证b,m互质,那么解同余方程b*x=1(mod m)可以求出x

所以当遇到除法取模运算时,可以先求出逆元,转换成乘法取模运算

/*
如果单独是个A,那么就可以分解质因数后用公式求约数个数
那么B个A相乘,其约数个数就是mul{1+p^1+p^2...+p^B*ci}
结果是比数列求和后再相乘,每项等比数列的结果是
(pi^(B*ci+1)-1)/(pi-1) mod9901,
1.pi-1不是9901的倍数,(pi-1)^(9901-2)就是逆元
2.pi-1是9901的倍数,逆元不存在,但是pi mod 9901=1。。。 先把A分解质因数,再等比数列求和(快速幂+逆元),
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define mod 9901 int m,p[],c[];
void divide(int n){
m=;
for(int i=;i*i<=n;i++)
if(n%i==){
p[++m]=i,c[m]=;
while(n%i==) n/=i,c[m]++;
}
if(n>) p[++m]=n,c[m]=;
}
ll pow(ll a,ll b){
ll res=;
while(b){
if(b&) res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
} int main(){
ll a,b,ans=;
scanf("%lld%lld",&a,&b);
divide(a);//分解质因数
for(int i=;i<=m;i++){
if((p[i]-)%mod==){
ans=ans*(b*c[i]+)%mod;
continue;
}
//求分子和分母逆元
ll x=pow(p[i],b*c[i]+)%mod;
x=(x-+mod)%mod;
ll y=pow(p[i]-,mod-)%mod;
ans=ans*x%mod*y%mod;
}
printf("%lld\n",ans);
}

求解同余方程:a*x=b(mod m)等价于a*x-b是m的倍数,等价于a*x+m*y=b,当gcd(a,m)|b时,有解

按照拓展欧几里得算法,可解得特解x=x0*b/gcd(a,m)就是原线性同余方程的一个解

  通解为所有模m/gcd(a,m)与x同余的整数

求解同余方程:noip2012:a*x=1(mod b)的最小整数解

#include<bits/stdc++.h>
using namespace std;
#define ll long long ll a,b,x,y;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b){x=;y=;return a;}
ll d=exgcd(b,a%b,x,y);
ll z=x; x=y,y=z-y*(a/b);
return d;
}
int main(){
cin >> a >> b;
exgcd(a,b,x,y);//x可能是负数
cout << (x%b+b)%b<<endl;
}

扩展欧几里得,解线性同余方程 逆元 poj1845的更多相关文章

  1. Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)

    一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...

  2. poj 1061 扩展欧几里得解同余方程(求最小非负整数解)

    题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...

  3. 【扩展欧几里得】NOIP2012同余方程

    题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...

  4. poj 2142 扩展欧几里得解ax+by=c

    原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...

  5. POJ2115 - C Looooops(扩展欧几里得)

    题目大意 求同余方程Cx≡B-A(2^k)的最小正整数解 题解 可以转化为Cx-(2^k)y=B-A,然后用扩展欧几里得解出即可... 代码: #include <iostream> us ...

  6. C. Ray Tracing——披着搜索外衣的扩展欧几里得

    [题目大意] 给你一个n*m的矩形,光线从(0,0)出发,沿右上方向以每秒根号2米的速度运动,碰到矩形边界就会反弹(符合物理规律的反弹),询问k个点,这些点都在矩形内部且不在矩形边界上,求光经过这些点 ...

  7. bzoj1407 [Noi2002]Savage——扩展欧几里得

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...

  8. Uva12169 扩展欧几里得模板

    Uva12169(扩展欧几里得) 题意: 已知 $x_i=(a*x_{i-1}+b) mod 10001$,且告诉你 $x_1,x_3.........x_{2t-1}$, 让你求出其偶数列 解法: ...

  9. 【Luogu】P1516青蛙的约会(线性同余方程,扩展欧几里得)

    题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍. ——信息学奥赛之数学一本通 避免侵权.哈哈. 两只青蛙跳 ...

随机推荐

  1. pyautogui_pdf内容提取到excel内_3

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  2. Spark进阶之路-Spark HA配置

    Spark进阶之路-Spark HA配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 集群部署完了,但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借 ...

  3. Kafka 0.10 Coordinator概述

    由Kafka内置实现了失败检测和Rebalance(ZKRebalancerListener),但是它存在羊群效应和脑裂的问题,客户端代码实现低级API也不能解决这个问题.如果将失败探测和Rebala ...

  4. Hive记录-配置远程连接(JAVA/beeline)

    1.修改配置hive-site.xml    hadoop core-site.xml限制---参考Hive记录-部署Hive环境 2.启动hadoop #sh /usr/app/hadoop/sbi ...

  5. nodejs实现新闻爬虫

    作为费德勒的铁杆粉丝,每天早上都会在新浪体育里面的网球频道浏览费德勒新闻.由于只关注费德勒的新闻,所以每次都要在网页中大量的新闻中筛选相关信息,感觉效率好低,所以用node写了一个简单的爬虫程序通过每 ...

  6. LightOJ - 1246 Colorful Board(DP+组合数)

    http://lightoj.com/volume_showproblem.php?problem=1246 题意 有个(M+1)*(N+1)的棋盘,用k种颜色给它涂色,要求曼哈顿距离为奇数的格子之间 ...

  7. js中常用事件

    鼠标事件 /* onclick:点击某个对象时触发 ondblclick:双击某个对象时触发 onmouseover:鼠标移入某个元素时触发 onmouseout:鼠标移出某个元素时触发 onmous ...

  8. Json Schema简介

    1. 引言 什么是Json Schema? 以一个例子来说明 假设有一个web api,接受一个json请求,返回某个用户在某个城市关系最近的若干个好友.一个请求的例子如下: { "city ...

  9. JavaScript之从浏览器一键获取教务处个人课程信息【插件】

    由于博主的个人网站(:http://www.johnnyzen.cn/),每学期都需要更新呈现课程的静态信息,由于课程量多,而且手动爬取很冗杂,特别想自动化实现.这不,今天终于有点时间了,把之前写no ...

  10. JavaScript之this,call,apply

    this:被调用的上下文对象: apply与call:切换被调用的上下文对象,即 调用时,this被临时性地切换 //demo 1 [call] function forEach(list,callb ...