about乘法逆元
本博客部分摘自 hwim
定义
乘法逆元的定义:若存在正整数a,b,p, 满足ab = 1(mod p), 则称a 是b 的乘法逆元, 或称b 是a 的乘法逆元。b ≡ a-1 (mod p),a ≡ b-1 (mod p)
比如说, 在模7 意义下,3 的乘法逆元是5, 也可以说模7 意义下5的乘法逆元是3。模13意义下5的逆元是8
存在性
和同余方程很相似,在同余方程中
ab ≡ 1(mod p)
若a 与p 互质, 则一定存在一个正整数解b, 满足b < p,若a 与p 不互质, 则一定不存在正整数解b.
所以逆元要求a与p互质
求法
求逆元有三种求法,
1、扩展欧几里得
扩展欧几里得可以用来求这样的一组解的:ax+by = gcd(a,b),求x和y
逆元,求这样的一个解:ax ≡ 1 (mod b),
我们变一下式子
ax+by = gcd(a,b),变成 ax+by = c 求一个数等于c
ax ≡ 1 (mod b),变成 ax-by = 1 如果将y看成负的,ax+by = 1
那么,就可以用exgcd求了。
code:
#include<cstdio> int exgcd(int a,int b,int &x,int &y)
{
if (b==)
{
x = ;
y = ;
return a;
}
int r = exgcd(b,a%b,x,y);
int tmp = x;
x = y;
y = tmp-a/b*y;
return r;
} int main()
{
//gcd(a,p)==1
int a,p,r,x,y;
while (scanf("%d%d",&a,&p)!=EOF)
{
r = exgcd(a,p,x,y);
printf("%d",(x%p+p)%p);
}
return ;
} 扩展欧几里得求逆元
exgcd
2、线性求逆元
ab = 1(mod p),求b
p%a = p-(p/a)*a;c++向下取整
那么(p/a)*a = p-(p%a);
(p/a)*a = -(p%a);在模p意义下p可以约掉
a = -(p%a)/(p/a);换一下位置
a-1 = -(p%a)-1*(p/a);
a-1可以用(p%a)-1推出,所以就可以用递推式来推出1到a的所有数的逆元。
code
求一个数的逆元
int INV(int a)//线性求a的逆元
{
if(a==) return ;
return ((-(p/a)*INV(p%a))%p);
}
求1-n的逆元
int inv[MAXN];
void INV(int a,int p)
{
inv[] = ;
for (int i=; i<=a; ++i)
inv[i] = (-(p/i))*inv[p%i]%p;
}
线性求逆元1
3、欧拉函数求逆元
欧拉定理:aφ(p) ≡ 1(mod p)(不会证,逃
对于任意互质的a,p 恒成立。
欧拉定理用来求逆元用的是欧拉定理的一个推论
a*aφ(p)-1 ≡ 1(mod p)
仔细观察,a*b ≡ 1(mod p),在这里的b不就是上面的aφ(p)-1吗?,所以求出aφ(p)-1就好了。
所以我们用快速幂就可以求出乘法逆元了。
这个方法它需要多算一个欧拉函数,代码这里不再给出。
这里给出求欧拉函数O(根n)的做法
不懂欧拉的戳这里11101001
int getphi(int x){
int ret=;
for(int i=;prime[i]*prime[i]<=x;i++){
if(x%prime[i]==)
{
ret*=prime[i]-;
x/=prime[i];
while(x%prime[i]==)
x/=prime[i],ret*=prime[i];
}
}
if(x>) ret*=x-;
return ret;
}
V欧拉
应用
我们知道(a+b)%p = (a%p+b%p)%p
(a*b)%p = (a%p)*(b%p)%p
求(a/b)%p时,可能会因为a是一个很大的数,不能直接算出来,也无法像上面一样分解。
我们可以通过求b关于p的乘法逆元k,k ≡ b-1 (mod p) ,将a乘上k再模p,即(a*k) mod p。其结果与(a/b) mod p等价。
然后这就成了求a*k%p,然后就可以用那两个公式了。
about乘法逆元的更多相关文章
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- 51nod1256(乘法逆元)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1256 题意:中文题诶~ 思路: M, N 互质, 求满足 K ...
- 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
- Codeforces 543D Road Improvement(树形DP + 乘法逆元)
题目大概说给一棵树,树的边一开始都是损坏的,要修复一些边,修复完后要满足各个点到根的路径上最多只有一条坏的边,现在以各个点为根分别求出修复边的方案数,其结果模1000000007. 不难联想到这题和H ...
- HDU 1452 (约数和+乘法逆元)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1452 题目大意:求2004^X所有约数和,结果mod 29. 解题思路: ①整数唯一分解定理: 一个 ...
- HDU 1576 (乘法逆元)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973.但是给出的A是mod形式n,n=A%9973. 解题思 ...
- 51Nod 1256 乘法逆元 Label:exgcd
1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...
- hdu 2669 Romantic (乘法逆元)
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU3037 Saving Beans(Lucas定理+乘法逆元)
题目大概问小于等于m个的物品放到n个地方有几种方法. 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m. 这个方程的非负整数解个 ...
随机推荐
- python计算机基础(三)
简述Python垃圾回收机制: 当x=10,赋值x=11,的代码,也就是10没有对应的变量名, 10在python眼中相当于垃圾,就会被清理掉,释放内存. 对于下述代码: x = 10 y = 10 ...
- drf 频率组件 META字典详情
drf频率组件 什么是频率 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次 自定义频率规则 1.取出访问者ip 2.判断当前ip在不在访问字典中: 不在,则添加进去,返回True; 3. ...
- python数据类型之字符串(str)和其常用方法
字符串是有序的,不可变的. 下面的例子说明了字符串是不可变的 name = 'alex' name = 'Jack' """ 并没有变,只是给name开启了一块新内存,储 ...
- console_init()分析
启动阶段初始化控制台流程分析, start_kernel console_init(); -->tty_ldisc_begin(); /* Setup the default TTY line ...
- 纯虚函数(pure virtual function )和抽象类(abstract base class)
函数体=0的虚函数称为“纯虚函数”.包含纯虚函数的类称为“抽象类” #include <string> class Animal // This Animal is an abstract ...
- 重新造轮子之静态链接1(Static linking)
最近学习计算机病毒学的过程中,又讲到了静态链接的问题,联想到了之前保健哥在信息安全的课堂上向我们展示了一个没有main()函数的C程序到底应该如何编写.个人觉得这个小实验对于加深静态链接的过程的理解也 ...
- BZOJ 3590: [Snoi2013]Quare
首先有一个性质,一个双联通图一定可以拆成一个小的双联通子图和一条链 一个点可以视为权值为0的双联通图或者一个点的链 状压DP,枚举子集 O(3^n*n^2) #include<cstdio> ...
- 【原创】Mysql中事务ACID实现原理
引言 照例,我们先来一个场景~ 面试官:"知道事务的四大特性么?" 你:"懂,ACID嘛,原子性(Atomicity).一致性(Consistency).隔离性(Isol ...
- luogu3389 【模板】高斯消元法
#include <algorithm> #include <iostream> #include <cstdio> #include <cmath> ...
- 【SDOJ 3741】 【poj2528】 Mayor's posters
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...