扩展欧几里得,解线性同余方程 逆元 poj1845
定理:对于任意整数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的更多相关文章
- Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)
一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
- 【扩展欧几里得】NOIP2012同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- poj 2142 扩展欧几里得解ax+by=c
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...
- POJ2115 - C Looooops(扩展欧几里得)
题目大意 求同余方程Cx≡B-A(2^k)的最小正整数解 题解 可以转化为Cx-(2^k)y=B-A,然后用扩展欧几里得解出即可... 代码: #include <iostream> us ...
- C. Ray Tracing——披着搜索外衣的扩展欧几里得
[题目大意] 给你一个n*m的矩形,光线从(0,0)出发,沿右上方向以每秒根号2米的速度运动,碰到矩形边界就会反弹(符合物理规律的反弹),询问k个点,这些点都在矩形内部且不在矩形边界上,求光经过这些点 ...
- bzoj1407 [Noi2002]Savage——扩展欧几里得
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...
- Uva12169 扩展欧几里得模板
Uva12169(扩展欧几里得) 题意: 已知 $x_i=(a*x_{i-1}+b) mod 10001$,且告诉你 $x_1,x_3.........x_{2t-1}$, 让你求出其偶数列 解法: ...
- 【Luogu】P1516青蛙的约会(线性同余方程,扩展欧几里得)
题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍. ——信息学奥赛之数学一本通 避免侵权.哈哈. 两只青蛙跳 ...
随机推荐
- 强大的svg操作库——Raphael
先常规先引入Raphael库: <script src="raphael.js" type="text/javascript"></scrip ...
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...
- 消除 transition 闪屏
.css { -webkit-transform-style: preserve-3d; -webkit-backface-visibility: hidden; -webkit-perspectiv ...
- 改变placeholder的字体颜色大小
input::-webkit-input-placeholder { /* WebKit browsers */ font-size:14px; color: #333; } input::-moz- ...
- IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
JetBrains公司的intellij Idea堪称JAVA编程界的苹果,用户体验非常好 下面介绍一下IDEA的一个能显著提升写代码效率的非常好用的功能设置—— Auto Import Auto I ...
- luogu P4162 [SCOI2009]最长距离
传送门 可以枚举两个点然后计算答案,至于是否合法,就要看可不可以通过移不超过\(t\)个箱子使得两点连通,也可以看做找一条路径使得路径上的1个数不超过\(t\) 所以可以考虑最短路,相邻的点两两连边, ...
- CTSC&APIO2018游记
Day-1 布吉岛干什么,好像只看了Splay Day0 再次布吉岛干什么,好像也只看了Splay 然后上了火车 wc没买方便面,只能吃40元的盒饭 半夜睡不着,那应该是我太菜了 Day1 九点下火车 ...
- luogu P2779 [AHOI2016初中组]黑白序列
传送门 注:本题解中下标从1开始 这题可以想出一个\(O(n^2)\)的dp,只要考虑每个偶数位置可以从前面的哪个位置加上一个"B...W..."转移过来 然而数据范围有5e5,, ...
- POJ2031 Building a Space Station【最小生成树】
题意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则算为已连通,无需再搭桥.求搭建通路的最小边长总和是多少. 思路: 先处理空间点之间的距离 ...
- Maxwell入门
1 下载tar包 Download binary distro: https://github.com/zendesk/maxwell/releases/download/v1.19.4/maxwel ...