- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。- T: F8 e) u3 [
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
/ r7 ^2 Y& |' B; z a*r1≡q1 (mod n)& N1 H0 t; i0 s' \: c9 _
q1*r2≡q2 (mod n)* u' t' u: W& g
q2*r3≡q3 (mod n)
% L2 U6 O+ E$ H0 C* j4 ?3 | ." C/ n: b- g; o1 v1 |7 n
.' G+ o' k5 N: G, e# `8 u6 d6 X, p
.
1 x+ U e5 ?/ n( ~( {- d* o qm-1*rm≡qm (mod n). N9 m! P% l* b. g
上述等式相乘,得:' B) M" ^* c8 t7 X& k% V p
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>7 _: [+ p. [) L
a*(q1*q2*...*qm)≡rm (mod n)
( A( E6 g% U* \8 \( I+ H, b5 O 如果对qi(1≤i≤m)进行如下的限定:- {2 |# s9 f+ |) [+ O
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
/ B! F! u3 k0 F# D0 E L 则 qm=±1
) \. H, Q. ?9 c; t" a! c/ g 即 a与q1*q2*...*qm互逆2 K$ u5 N* `, c
例 求28在299的逆2 [, u" j$ {6 U2 E; d
28*11≡9 (mod 299)) S4 o$ D& o% j9 X% i- {0 r
9*33≡-2 (mod 299)
7 k: k9 y" Q: Q; h -2*-150≡1 (mod 299)( L' J8 n6 j. ~+ U
逆为: 11*33*-150≡-32 (mod 299). `9 i) Q+ H J$ Y. Y8 b5 x
28*-22≡-1 (mod 299)
) w8 v% y e- ]7 ?; t' w 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
& U0 k& N# D* Y6 T, _$ p9 A3 [6 N6 h% x 下面给出其中一个算法:% q, i/ a# F+ v1 s0 x H' o
1 输入a,n
( U9 g& W4 h9 y! | 2 resulte = 1 ; 保存逆的结果
( P! F( Y# s; b8 g, d+ s. z/ P' r 3 r=n/a+1 ; 保证 r*a>n
+ e$ l( S: \' r 4 q=r*a-n ; 得到余数,该余数小于a7 y" O; w7 S* Q b" w" Q; N
5 resulte=(resulte*r)%n
G7 Z! M4 D/ L 6 if q=1 then print(逆为: resulte) return resulte
9 z, t J4 j: |& V$ M5 ? 7 if q=0 or q=a then print(存在因子: a) return a ;
& i% |/ v, G/ y- _ 8 a=q
) x# I( {3 h4 K- `1 e 9 goto 3
/ h: a7 }5 [& a8 u$ u
@2 {) A& l* a( H |
zan
|