乘法逆元与费马小定理
2016-05-17 19:54
274 查看
逆元:类似倒数和相反数的概念,具体自己百度,我也是百度的,这让我想起了离散数学中提到了左逆右逆,哎,离散没学好啊。
乘法逆元:我们知道(A/B)%M=(A∗(1/B))%M。令1/B等于H,那么H就是B关于M的乘法逆元,其实就是关于M的一个相反数,B∗H≡(1%M)
那么我们如何求乘法逆元呢
扩展欧几里得算法
费马小定理
扩展欧几里得算法
B∗H≡(1%M)可以等价于B∗X+M∗Y=1,那么我们主需要调用欧几里得算法求解出来就可以了。
费马小定理
费马小定理:假如M是素数,且H与M互质,那么HM−1≡(1%M)
那么联立我们之前的A∗H≡(1%M)
得出乘法逆元H=AM<
cc35
/span>−2
这个地方不能简单调用Pow这个库函数,我们要自己写一个带模的快速幂算法。
参考
费马小定理应用参考
乘法逆元:我们知道(A/B)%M=(A∗(1/B))%M。令1/B等于H,那么H就是B关于M的乘法逆元,其实就是关于M的一个相反数,B∗H≡(1%M)
那么我们如何求乘法逆元呢
扩展欧几里得算法
费马小定理
扩展欧几里得算法
B∗H≡(1%M)可以等价于B∗X+M∗Y=1,那么我们主需要调用欧几里得算法求解出来就可以了。
int cal(int a,int b) { int x,y; int Gcd=gcd_extend(a,b,x,y); if(1%Gcd) return -1; x*=1/Gcd; b/=Gcd; b=b<0? -b:b; int ans=x%b; ans=ans<=0? ans+b:ans; return ans; }
费马小定理
费马小定理:假如M是素数,且H与M互质,那么HM−1≡(1%M)
那么联立我们之前的A∗H≡(1%M)
得出乘法逆元H=AM<
cc35
/span>−2
这个地方不能简单调用Pow这个库函数,我们要自己写一个带模的快速幂算法。
int cal(int x,int m,const int MOD) { int ans=1; while(m){ if(m&1) ans=ans*x%MOD; m>>=1; x=x*x%MOD; } return ans; }
参考
费马小定理应用参考
相关文章推荐
- [BZOJ1002][FJOI2007]轮状病毒(打表找规律+高精度||结论)
- 【bzoj1618】【Usaco2008 Nov]】Buying Hay 购买干草
- RIP、OSPF、BGP三种协议
- Ubuntu下Chrome造成系统假死的解决方法
- Docker 学习日志 (二)
- BZOJ -1864: [Zjoi2006]三色二叉树
- 算是学完了《Servlet&JSP学习笔记》,立此存照
- IOS学习之初识KVO
- SQL索引一步到位
- git命令每次提交都要输入用户名和密码的解决办法(git push origin master)
- 2016SDAU编程练习三1018
- 数据库学习之旅——实验3(1)
- MapReduce应用实例
- 自己想做的
- 系统优化
- iOS_UITextField整理
- 在ubuntu下编译ijkplayer-android
- 指针和链条
- 树莓派使用花生壳(内网版)攻略
- M % (M + 1) = ???(dp+数学)(北理16校赛)