乘法逆元
时间:2019-02-11
本文章向大家介绍乘法逆元,主要包括乘法逆元使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
乘法逆元
在组合计数中,由于答案过大,需要取模。比如计算.
为了求出中的,就需要求出的逆元,因为,所以。
1-费马小定理
(的推论),当为质数且。
这样,用快速幂求就好。
ll Reverse(ll op){
ll poi = mod - 2, base = op, res = 1;
while(poi){
if(poi&1)
res = (res*base) % mod; //在mod>INT_MAX时不适用。
base = (base*base) % mod;
poi >>= 1;
}
return res;
}
2-扩展欧几里得算法
一定有解。
又设 ,
则
因此,。
只要求解,将带入即可求出。
这样,我们可以像欧几里得算法一样不断减小系数的规模。只要递归地求解更小规模的方程,最后回溯时将解依次带回就好。递归终点是当时,这时,一组解是。
当时,可用来求解在模意义下的逆元,或者在模意义下的逆元.
void exEuclid(ll a, ll b, ll &d, ll &x, ll &y){
if(!b)
d=a, x=1, y=0; //d就是gcd
else{
exEuclid(b, a % b, d, y, x);
y -= x * (a / b); //x=y', y=x' - y'*(a/b)
}
}
复杂度与辗转相除法相同,因为每一次都使较大的数减小一半以上。
3-线性递推法
需要是质数。
设,
两边同乘得
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习第4天:预测1立方米混凝土抗压强度
- 硬件笔记之GP106-90 3GB GTX1060 3GB魔改
- Java BigDecimal 的舍入模式(RoundingMode)详解
- 实际工程中加快 Java 代码编写的小提示
- CentOS7 离线安装软件并准备依赖包
- CentOS7 SkyWalking APM8.1.0 搭建与项目集成使用
- CentOS7 cassandra安装与测试
- Centos7 搭建DNS服务器
- CentOS7 fastdfs安装与测试
- CentOS7 jdk安装
- CentOS7 kafka安装
- Centos7 keepalived安装并监控mysql实现自动切换
- Centos7 mqtt集群安装
- CentOS7 mysql5.7安装并配置主主同步
- CentOS7 nginx安装并负载mysql