- 在线时间
- 7 小时
- 最后登录
- 2024-8-19
- 注册时间
- 2023-11-2
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 58 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 23
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 12
- 主题
- 6
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   18.95% TA的每日心情 | 郁闷 2023-12-11 09:00 |
|---|
签到天数: 7 天 [LV.3]偶尔看看II
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。
1 x) J' z# y3 B# W设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
9 Q! i0 F* I, V: L+ A3 S a*r1≡q1 (mod n)5 f. v D& Q4 Y1 e: b
q1*r2≡q2 (mod n) s7 c( W+ R2 K
q2*r3≡q3 (mod n)9 R! @( r$ `! F) B9 q
./ ]' n# _+ v! c' l
.- |! g* p- z) X( w
.
h9 K5 }- ?0 N, } qm-1*rm≡qm (mod n)
9 F1 B7 R, a: a9 R- K& e 上述等式相乘,得:! t8 n( a s2 ~* s# U; M! t
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>
_9 M) a N; W6 I2 A! a4 H a*(q1*q2*...*qm)≡rm (mod n)
6 a" m( S- W8 c 如果对qi(1≤i≤m)进行如下的限定: j+ p0 K) g8 V6 j$ U. T
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
2 [ h1 o+ s7 C! m9 N0 w 则 qm=±1 z( A' b8 A$ }1 {
即 a与q1*q2*...*qm互逆, r: j9 b8 o _4 c: C" X8 k/ F
例 求28在299的逆
r, P' Q. B1 b. ]4 O 28*11≡9 (mod 299)- v F. R& @/ V; Q- \6 C3 A" X
9*33≡-2 (mod 299)
! l( y$ B3 i9 X! U0 o$ p" @ -2*-150≡1 (mod 299)/ U0 _- s9 {9 q; G4 i' {' E
逆为: 11*33*-150≡-32 (mod 299)4 p3 \3 L. N5 ]9 j
28*-22≡-1 (mod 299)
" Y0 v. Q: V( D, o* P0 u* L 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
% u6 z- C- X n' l 下面给出其中一个算法:
$ [! x7 k2 @+ O; U( [/ i7 U9 _ 1 输入a,n
. _/ z8 S: h" U0 |- L k1 G. g 2 resulte = 1 ; 保存逆的结果 0 L9 f8 @/ [. P' l& V& r' {
3 r=n/a+1 ; 保证 r*a>n+ i( F" f1 J2 k1 B7 p7 y* L k! W' w
4 q=r*a-n ; 得到余数,该余数小于a/ c1 \ p, c9 o
5 resulte=(resulte*r)%n / @9 G( E( E, d) z7 c; K
6 if q=1 then print(逆为: resulte) return resulte
8 U' |5 D: L; c0 x! h& ^3 Y 7 if q=0 or q=a then print(存在因子: a) return a ;
$ e; E- D- k4 ~6 `5 w4 Z9 v 8 a=q- I! H0 q" J0 D1 S# L
9 goto 3
5 y" [& `0 k% c, v" m2 F1 L
& p' c& Y; {5 o4 I( ]5 ` |
zan
|