- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。8 y6 T" w1 ]; }8 [- J/ `
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
, m! M5 W8 V7 B6 K a*r1≡q1 (mod n)
+ g/ r; s2 F9 V- q) e q1*r2≡q2 (mod n)2 }' l8 n$ _$ W, q8 _8 q5 d
q2*r3≡q3 (mod n)1 I) z0 E8 c5 H1 n9 c/ G, P
.
2 y+ ~# W( {, A, G .
" v4 r) m. S4 G. Q .! b# h Y- e8 f
qm-1*rm≡qm (mod n)
( g0 x* X& P8 {- T. ]& V0 i5 O6 A 上述等式相乘,得:" u* ?# {# v, Q0 l
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>2 x/ v9 S8 B9 C8 w" D2 y; s
a*(q1*q2*...*qm)≡rm (mod n)
1 y K2 A7 Y3 \: M4 w 如果对qi(1≤i≤m)进行如下的限定:
$ N& \ e. s8 z* ~5 y$ T a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
0 _( P6 t9 \( W, ?! A# S, f- A1 b 则 qm=±1
( L6 x7 }& C2 [. k j 即 a与q1*q2*...*qm互逆; w3 e# ~* G3 x. C' w4 ~2 L! ~% n
例 求28在299的逆
' l& x6 C1 R8 B5 ] 28*11≡9 (mod 299)( `4 M3 K, `% ~: s3 N
9*33≡-2 (mod 299)/ x/ t9 K- J2 Y
-2*-150≡1 (mod 299)
6 u/ s8 A+ ^/ m: ]: p4 z+ c' X/ M0 h 逆为: 11*33*-150≡-32 (mod 299)5 k1 ]- J* B: U) D* N- l% m% G
28*-22≡-1 (mod 299)* C3 v) h) Z* ?6 T7 `% x0 \/ }
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
l w! g! k6 ]. ^4 o 下面给出其中一个算法:
4 l I. ]) {: f' z9 k' ^* b7 S* u 1 输入a,n # N2 H" T# w) j9 I) _$ T9 g- F/ E
2 resulte = 1 ; 保存逆的结果
8 G6 R7 y& N! e6 L* t; {4 I 3 r=n/a+1 ; 保证 r*a>n
! ?1 |9 f$ L# N; Q2 b 4 q=r*a-n ; 得到余数,该余数小于a
9 C8 C; M5 x& ]$ N 5 resulte=(resulte*r)%n
' @, D2 C2 Q Q5 N) ? 6 if q=1 then print(逆为: resulte) return resulte9 g- t0 j2 S2 @3 g& G
7 if q=0 or q=a then print(存在因子: a) return a ;
1 h0 {8 B8 X6 R- t* w$ H+ v; n! i) H 8 a=q
' ?' Q# m, n# b2 m& a 9 goto 3
1 r5 X4 e" `5 v6 m- |. M8 |, p4 S1 T
3 P. Y$ R* R) k# v |
zan
|