- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。! a4 m8 v& U5 Z/ t
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
" H% f: l) a8 ] ], S# b a*r1≡q1 (mod n)3 w: ^! \( G5 g
q1*r2≡q2 (mod n)
! n" y0 F( W* w8 c0 W q2*r3≡q3 (mod n)
/ W" h/ K6 q' o6 t0 d" q .
2 j2 X1 |( M' ^2 Z- j .
8 _$ P4 \8 a6 n) r: U3 M .- {1 R0 N+ C/ n1 `% d f# n7 _+ S
qm-1*rm≡qm (mod n)+ ]$ k% f$ N4 I
上述等式相乘,得:4 q5 e! E" x" j Z& x* i% N
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>0 Z6 X6 p3 k* v+ W0 [9 o7 W
a*(q1*q2*...*qm)≡rm (mod n) `: `* T+ p' g! [' S) A9 R2 h5 Z
如果对qi(1≤i≤m)进行如下的限定:7 ~, N2 y R4 T3 h
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm| `6 g1 N+ P/ d6 E# J3 \/ O R! w ~
则 qm=±17 z& v- ~1 D8 X* i7 c: A
即 a与q1*q2*...*qm互逆
- `% r' ?1 n: _- z; d 例 求28在299的逆 @% q3 H/ B/ N7 e
28*11≡9 (mod 299)
- e8 h+ a* L |" X1 u 9*33≡-2 (mod 299)# `( x# k1 M: W8 l8 [- Y
-2*-150≡1 (mod 299)6 B% V* t# s4 v( c6 c5 o) D8 a q
逆为: 11*33*-150≡-32 (mod 299)
5 V z6 W* B4 ]* g" t9 A- Q2 ] 28*-22≡-1 (mod 299)
1 U( T- W1 s& Y/ b( B8 a& k5 P" e 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
; U- b, b; p/ `% [: f; S 下面给出其中一个算法:0 I3 }. J2 f8 Y) |6 O
1 输入a,n $ J/ C1 E! q6 v) K& M/ K; k: l# T
2 resulte = 1 ; 保存逆的结果
: ?& L7 V3 P, w u; n: I* v 3 r=n/a+1 ; 保证 r*a>n
$ k. v3 F# ?/ \2 |7 ?- ~4 ~ 4 q=r*a-n ; 得到余数,该余数小于a$ I$ [' M1 w+ ], M
5 resulte=(resulte*r)%n * i" Z E1 u; \6 |" l
6 if q=1 then print(逆为: resulte) return resulte) t' R* U* n1 q c; ?% b
7 if q=0 or q=a then print(存在因子: a) return a ;& H) X f# N5 S3 ]% b/ l0 q$ K! {
8 a=q: v+ G+ ~( _: ?0 M
9 goto 3
7 w. W6 b8 [8 y: y- v4 y g" M
6 ~' M" {0 s5 W+ L% J |
zan
|