- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。
7 @0 H/ I! j K/ i7 S设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m9 O7 e0 ?# @2 ~1 |( u# F5 }/ X( _0 }
a*r1≡q1 (mod n)' P7 u' T8 l; D- G% t6 D
q1*r2≡q2 (mod n)* m, ^% ^( X% R$ e% @2 o
q2*r3≡q3 (mod n)/ q* l$ o7 |1 L2 O
.0 ^" W3 Y6 b2 f6 Y* f+ f
.: l7 D$ q" y: X% |. X- I
.
* T( ~3 @8 U E2 @: r9 X! K4 f$ m7 I9 E qm-1*rm≡qm (mod n)& B- e4 [+ D) N3 K. w& N o
上述等式相乘,得:
+ k& ]" @5 c, |8 g6 n1 V5 A/ g a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =># l8 y2 F$ P$ ^. Y
a*(q1*q2*...*qm)≡rm (mod n)
: M' \2 L2 k4 Y/ p 如果对qi(1≤i≤m)进行如下的限定:% c, {9 O) h; B3 u
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
) V: m. `3 _8 M' n) ?9 \5 g. c 则 qm=±1" a1 U0 ?0 M; t6 q: M4 c$ Q
即 a与q1*q2*...*qm互逆" x" Y# X* t" V" T
例 求28在299的逆
. K; F6 d2 N4 y2 l6 T2 V3 ^6 E3 h 28*11≡9 (mod 299)* F5 u! W p; \" o; L! Q
9*33≡-2 (mod 299)
: e6 S, l( x6 Z. D3 Y n2 Z3 N+ z -2*-150≡1 (mod 299)! h1 z, [5 q P4 Q8 s# B1 e
逆为: 11*33*-150≡-32 (mod 299)
4 \* a! Y& q8 m( k 28*-22≡-1 (mod 299)( G& F4 x# I. W
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。2 _3 S p) e; h0 a
下面给出其中一个算法:1 O+ e. a$ F: U+ G* c4 e) V
1 输入a,n ! I- B# h9 j. @. s& H m
2 resulte = 1 ; 保存逆的结果
/ Y9 Q* M4 i; w8 ~) D 3 r=n/a+1 ; 保证 r*a>n. O" ?4 \# v! O8 D
4 q=r*a-n ; 得到余数,该余数小于a
( i( ?9 F7 @; J( ^ L) M0 i 5 resulte=(resulte*r)%n
+ O# ^; E2 @# M$ u/ I; Q. Z 6 if q=1 then print(逆为: resulte) return resulte
: z% U7 g! i3 p- ~ 7 if q=0 or q=a then print(存在因子: a) return a ;
) s) @8 n$ {" O0 A! H% o5 } 8 a=q
' x4 a3 _3 \% {2 [ 9 goto 37 A" u8 z2 C$ c
- f6 G I5 i7 _$ I8 v |
zan
|