- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。0 U) Q8 q1 b+ h
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
4 ^5 g0 n) q) d/ h6 d0 L9 |! t a*r1≡q1 (mod n)0 G$ H# ? U7 v+ }* c, g" y
q1*r2≡q2 (mod n)
& O s& T8 B/ e. I: s# j q2*r3≡q3 (mod n)4 ~4 h0 ~( p. @. z
.* C1 c: G' M/ H. E. c. ^
.
. c" C' x0 q8 i3 `! ~ .! @9 {+ e' ]+ ]6 Z5 L: w" U/ E
qm-1*rm≡qm (mod n)1 j' D6 G0 i4 v4 A
上述等式相乘,得:
8 ^( e# X5 y- K- V" p a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>
" O( X% K w9 g! P9 j/ ~' ]1 Q a*(q1*q2*...*qm)≡rm (mod n)
* S6 e0 z: o% c4 |8 k 如果对qi(1≤i≤m)进行如下的限定:9 {5 I+ j# Z0 ^9 K3 q5 y% | a
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
2 G: v& x) X* N6 {1 _6 p0 e P* x 则 qm=±1) i5 B; J+ t9 S# Q& a) F
即 a与q1*q2*...*qm互逆
/ ?/ G. X" H- C; ?& g6 m& O8 E) ^: `6 } 例 求28在299的逆) j0 ?, |4 D3 x7 e8 U- _1 l
28*11≡9 (mod 299); z5 m& J- o: b, e. m+ Z
9*33≡-2 (mod 299)" \1 p3 ]# S1 a- |6 Y4 ^* S# B6 X
-2*-150≡1 (mod 299)) r; r# J, G7 k2 f' p
逆为: 11*33*-150≡-32 (mod 299)8 A7 c* K, A3 H R2 J0 Y9 C( g+ n
28*-22≡-1 (mod 299)
+ C) y" u+ W$ K$ G" A 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
; E6 j1 ]1 V" d3 X. ^: \ 下面给出其中一个算法:
/ R. D- R" n0 m. |0 x3 o& Z" k6 [ 1 输入a,n
+ D6 x b& Z( y6 R! X 2 resulte = 1 ; 保存逆的结果
" |4 f4 N! B' W% f) f( Q 3 r=n/a+1 ; 保证 r*a>n, p6 M/ J8 J6 Q& O5 R1 k3 n& ^
4 q=r*a-n ; 得到余数,该余数小于a) z' I% E8 v, ^/ Z$ r9 h
5 resulte=(resulte*r)%n
8 J; V% o" L) T, Z2 U$ E 6 if q=1 then print(逆为: resulte) return resulte' C$ Q `' u, l7 t% [/ q
7 if q=0 or q=a then print(存在因子: a) return a ;6 g$ a @$ x* y1 B9 j7 T# q4 `
8 a=q
1 C. o+ E+ H/ K5 q; t 9 goto 35 r/ Q; r, W3 V/ ? [! l/ \
0 K7 D l4 d" i3 J, {- r |
zan
|