乘法逆元、扩展欧几里得算法、二元一次方程、a的n次方取余
来源:互联网 发布:网络公开课IT 编辑:程序博客网 时间:2024/05/22 23:58
知识点:乘法逆元,逆元的求法,二元一次方程求通解,a的n次方求余数
一,乘法逆元
乘法逆元的概念类似于倒数(
如果
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5685
逆元的作用:已知
模
逆元的存在性质:当
二,求逆元
下面该学习如何求解乘法逆元
暴力破解:
档模
扩展欧几里得算法:
首先要了解欧几里得算法,也就是辗转相除法,
上述过程求解ax+py=gcd(a,p)的过程,并不要求gcd(a,p)一定等于1。由上述过程 ,我们可以推广得到求解任意二元一次方程ax+by=c的解。
需要注意的一点是只有当
扩展欧几里得算法代码如下:
int exgcd(int a, int b, int &x, int &y){ if(b==0){ x = 1; y = 0; return a; }else{ int _gcd = exgcd(b,b%a,x,y); int tmp = x - (a/b)*y; x = y; y = tmp; return _gcd; }}x = (x % p + p) % p; // 通常需要求解最小的正整数逆元解ax=1(mod p)// 再次提醒a和p互素,即gcd(a,p) = 1
费马小定理:
费马小定理:假如p是质数,且
由
需要注意的是需要判断
O(n)求1~n逆元表:
由前面可知,当
采用递推的方法来求解所有
也注意上面求出来的逆元是负数,很多时候需要转化为正整数,而且是最小的正整数逆元。
代码如下:
const int p = 13;int inv[p+2];inv[1] = 1;for (int i = 2;i < p;i++) inv[i] = ((p - p / i)*inv[p%i]) % p;
对于1到p的都只存在一个小于p的逆元,为什么?
三,a的n次方取余
如求
代码如下:
long long remainder_of_an_exponential_recur(int a, int b, int c){ // 递归求 (a^b)%c if (b == 0) return 1; long long tmp = remainder_of_an_exponential_recur(a, b >> 1, c); if (b & 1) return (tmp*tmp*a) % c; else return (tmp*tmp) % c;}long long remainder_of_an_exponential_loop(int a, int b, int c){ // 递推求 (a^b)%c long long res = 1; long long tmp = a; while (b) { if (b & 1) res = (res*tmp) % c; tmp = (tmp*tmp) % c; b >>= 1; } return res;}
如果除数是
最后一个需要说的是公式:
在ALL X问题中:http://acm.hdu.edu.cn/showproblem.php?pid=5690。
要求检验一个全由
既可以利用余数有限重复循环的方法,即按照除法的方法依次计算余数,如果余数重复,那么就开始进入了循环,而余数的个数是有限的,小于k个。这和求
另一种方法是求解
求
a^{n}=a^{n/2}*a^{n/2}*ahttps://www.baidu.com/s?ie=UTF-8&wd=快速幂乘&tn=98012088_4_dg&ch=10
,n是奇数数<script type="math/tex" id="MathJax-Element-1408">a^{n}=a^{n/2}*a^{n/2}*ahttps://www.baidu.com/s?ie=UTF-8&wd=快速幂乘&tn=98012088_4_dg&ch=10 ,n是奇数数</script>
参考:
http://blog.csdn.NET/tsaid/article/details/7365936
http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html
https://wenku.baidu.com/view/c1b06ea60029bd64783e2c63.html
http://blog.csdn.net/stcyclone/article/details/52081822
- 乘法逆元、扩展欧几里得算法、二元一次方程、a的n次方取余
- 扩展欧几里得算法&同余方程&模m乘法逆元详解
- 扩展欧几里得算法&同余方程&模m乘法逆元详解
- 扩展欧几里得算法&同余方程&模m乘法逆元详解
- 扩展欧几里得算法求乘法逆元
- 【专题】欧几里得算法、扩展欧几里得、乘法逆元
- 乘法逆元的扩展欧几里得解法
- 乘法逆元(扩展欧几里得)
- A/B 扩展欧几里得与取余
- hdoj 1576 A/B 【扩展欧几里得 求乘法逆元】
- hdu 1576 A/B(乘法逆元,扩展欧几里得)
- 51nod 1256 乘法逆元(扩展欧几里得算法)
- 青蛙的约会----扩展欧几里得+乘法逆元
- csu1163扩展欧几里得之乘法逆元
- 乘法逆元与扩展欧几里得
- 扩展欧几里得(乘法逆元)
- 扩展欧几里得求乘法逆元
- 乘法逆元+扩展欧几里得+Lucas
- SwipeRefreshLayout自动刷新的问题
- Maven使用中的常见问题整理
- 2.React中文之Introducing JSX
- 关于js Uncaught TypeError: Cannot read property 'style' of null 问题
- JAVA 线程中的synchronized关键字的使用
- 乘法逆元、扩展欧几里得算法、二元一次方程、a的n次方取余
- 字符串连接
- 进程管理
- Altium Designer 10 下载,安装和破解
- 使用JAVA程序解析XML(dom4j+xpath)
- xargs用法详解
- 判定表法设计测试用例
- [LeetCode] 142. Linked List Cycle II
- Redis 命令大全