扩展欧几里得,解线性同余方程 逆元 poj1845
定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b)
int exgcd(int a,int b,int &x,int &y){if(b==0){x=1,y=0;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 9901int m,p[200],c[200]; void divide(int n){m=0;for(int i=2;i*i<=n;i++)if(n%i==0){p[++m]=i,c[m]=0;while(n%i==0) n/=i,c[m]++; }if(n>1) p[++m]=n,c[m]=1; } ll pow(ll a,ll b){ll res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod;b>>=1;}return res; }int main(){ll a,b,ans=1;scanf("%lld%lld",&a,&b);divide(a);//分解质因数for(int i=1;i<=m;i++){if((p[i]-1)%mod==0){ans=ans*(b*c[i]+1)%mod;continue;}//求分子和分母逆元 ll x=pow(p[i],b*c[i]+1)%mod;x=(x-1+mod)%mod;ll y=pow(p[i]-1,mod-2)%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 longll a,b,x,y; ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;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; }
转载于:https://www.cnblogs.com/zsben991126/p/10238553.html
扩展欧几里得,解线性同余方程 逆元 poj1845相关推荐
- CodeForces - 724C Ray Tracing(扩展欧几里得解方程)
题目链接:点击查看 题目大意:在 n∗mn*mn∗m 的矩阵中,从点 (0,0)(0,0)(0,0) 发射一个小球,以四十五度的方向出发,速度是 2\sqrt{2}2,当碰到壁时,会进行反射:当碰到 ...
- 扩展欧几里得 解方程小记
本来以前学习的时候就懵懵懂懂,长时间不用就完全不会了.. 首先对于扩展欧几里得,对于最一般的方程形式 ax+by=gcd(a,b),此方程一定有整数解,扩展欧几里便得能够求出其中的一组整数解x0,y0 ...
- HDU 5514 Collision(扩展欧几里得+解方程)——2014ACM/ICPC亚洲区北京站
传送门 Matt is playing a naive computer game with his deeply loved pure girl. The playground is a recta ...
- 欧几里得定理与扩展欧几里得
3,欧几里德定理:(射影定理) 定理指出素数是无限的. a*b*c+1要么是素数要么其质因子就是素数. 扩展欧几里得: 扩展欧几里得算法是欧几里得(又叫辗转相除法)的扩展.已知整数a.b,扩展欧几里得 ...
- 求解线性同余方程--扩展欧几里得
资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...
- 专题·扩展欧几里得定理【including 求解二元一次方程,线性同余方程
初见安~这里是基础数论专题(3)~[详见数论专栏] p.s:本文章假设你已经掌握了欧几里得算法--辗转相除法求最大公约数(gcd) 一.二元一次方程 形如的含有两个未知数且最高次数为1的方程我们称之为 ...
- 求逆元(线性求逆元)及其扩展欧几里得
线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...
- 扩展欧几里得求多组解CodeForces - 1244C
扩展欧几里得求多组解 扩展欧几里得可以求得满足ax+by = c的一组解(这里c%gcd(a,b)要等于0):假如求得的解为(x0 , y0),G = gcd(a , b),这时我们可以发现(x0 + ...
- 扩展欧几里得定理详解和运用(就不信你看不懂!)
1 :扩展欧几里得内容: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+by =c.(若 c%gcd(a,b)!=0)则无解 所以 我们求ax+by=c是不是可以转化为求 ax+by=k ...
最新文章
- centos6.5编译安装php7
- JavaScript实现dijkstra迪杰斯特拉算法(附完整源码)
- 学习笔记(31):Python网络编程并发编程-定时器
- Laravel核心解读 -- 事件系统
- java提交表单后页面不刷新_表单已经提交,但是点击后退,显示网页过期,刷新后怎样避免重复提交(急!!谢谢!)...
- postman使用之二:数据同步和创建测试集
- HDU1716 排列2【全排列+输出格式】
- JDK8相对于JDK7的一些新特性
- Alpha 完结撒花 —— 事后诸葛亮
- WEB-JSPELJSTL
- IDEA中的TODO使用和Debug史诗级详细使用说明
- 聊聊两个状态管理库 Redux Recoil
- 通达信口袋支点选股公式,选出口袋支点形态
- Idea Debug 窗口所有按钮详解
- thinkpad T480s使用体验
- Android之获取手机内部及sdcard存储空间
- ios 获取电量百分比_iOS 获取电池电量
- 初学计算机图形学——OpenGL实现二维图形平移,旋转(不使用opengl自带的函数,齐次方程实现)
- 学人工智能需要什么配置的电脑?AI电脑配置需求
- 网页在线倍速播放视频神器enounce myspeed
热门文章
- 生产力提升! 自己动手自定义Visual Studio 2019的 类创建模板,制作简易版Vsix安装包
- 使用内存数据库的.NET Core 3.0中基于身份(Identity-Based)的身份验证
- C#中的通用循环缓冲区
- ASP.NET Core与Dapper和VS 2017使用JWT身份验证WEB API并在Angular2客户端应用程序中使用它
- php 获取父类名称,[typecho]获取 父级分类 名称?
- python fortran混编 ctypes_关于python调用fortran编译的dll的问题
- python 基础学习--运算符集合
- eslint是什么_为什么eslint没有 no-magic-string?
- 如何修改tomcat项目的图标
- linux cnc 软件手册,最新LINUXCNC源程序原理说明.docx