↓ Skip to main content
  1. Posts/

逆元学习笔记

·393 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

acdreamer_逆元学习笔记

摘重点:

ksm(a,mod-2)的方法求逆元只适用于mod为质数且 gcd(a,mod)==1

扩展欧几里得算法求逆元只适用于gcd(a,mod)==1

扩展欧几里得算法求逆元

acdreamer的博客里提到一种通用的方法,正确性未知。(然而有b|a的前提呵呵呵呵呵)

但是你会发现费马小定理和扩展欧几里得算法求逆元是有局限性的,它们都会要求

a
与
m
互素。实际上我们还有一

种通用的求逆元方法,适合所有情况。公式如下

通用求逆元公式

O(n)求逆元:

其实有些题需要用到

1..n
模
p
的所有逆元,这里
p
为奇质数。那么如果用快速幂求时间复杂度为
快速幂法时间复杂度的量级
,

如果对于一个1000000级别的素数

p
,这样做的时间复杂度是很高了。实际上有
O(n) 递推做法
的算法,有一个递推式如下

递推公式

它的推导过程如下,设

推导设定式
,那么

代入后的等式

对上式两边同时除

i
,进一步得到

整理后的等式

再把

k
和
r
替换掉,最终得到

递推公式

初始化

初始值
,这样就可以通过递推法求出
1..n
模奇素数
p
的所有逆元了。

另外

1..n
模
p
的所有逆元值对应
1..n
中所有的数,比如
示例中的 n
,那么
示例中的数
对应的逆元是
该数的逆元
。

Related

bc #77 div 2 B ||hdu 5651 xiaoxin juju needs help (排列组合,逆元)

·869 words·2 mins
题目链接 题意;给出一个字符串,只由小写字母组成,可以任意排列,但是不能减少字符,问最多能得到多少个回文串,答案9+7 思路:排列组合题。 首先考虑无解的情况。统计出每个字母出现的次数,当字符串长度为奇数而且出现次数为奇数的字母的个数多于1个时无解,或者当字符串长度为偶数,出现次数为奇数的字母的个数多于0个时无解。 接下来,由于是回文串,只需要考虑len/2的情况,另一半是一一对应的。 其实就是一共有len/2的元素,其中有一些重复的,然后全排列。 多重元素的排列问题。 答案为(len/2)! % (cnt[1]!)% (cnt[2]!)…即可 哦要先把cnt降序排一下,只考虑cnt[i]>1的元素,然后因为是要考虑一半长度,所以每个cnt[i]/2 那一堆阶乘直接逆元搞就好了。。。。

hdu 5145 NPY and girls

http://acm.hdu.edu.cn/showproblem.php?pid=5145 题意:有n个女孩,编号1..n,第i个女孩在第a[i]个教室,m次访问,每次访问编号[L,R]的女孩,处于同一个教室的女孩一次只能访问一个,问有多少种访问方案。两个不同的方案当且仅当访问的顺序有所不同。

poj 3233 Matrix Power Series (矩阵快速幂+分治)

·619 words·2 mins
题目链接 题意: Given a n × n matrix A and a positive integer k, find the sum S = A + _A_2 + _A_3 + … + Ak. 思路: 对k进行二分。 比如,当k=6时,有: A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3) 应用这个式子后,规模k减小了一半。我们二分求出A^3后再递归地计算A + A^2 + A^3,即可得到原问题的答案。

poj 3070 Fibonacci (矩阵加速线性递推式)

·442 words·1 min
题目链接 题意:求f[n] % 10000,f为斐波那契数。 思路:按照题目给出的公式,或者按照加速线性递推式的方法都可以。。。 因为把模数的1E4手滑写成1E4+7结果调了半天也是没谁了呵呵呵呵。