- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。1 Q4 h% L5 W& F; p- w3 ]. b( L
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
; j, I7 R4 S3 H; z5 E9 d" s( A a*r1≡q1 (mod n)* O8 |, L8 l, _
q1*r2≡q2 (mod n)) |' p" p; z# g
q2*r3≡q3 (mod n)
# f+ r, G) J' i! X .: R! g1 V, f' E3 u a1 g
.
* r1 g) B6 q6 u .
- [$ V& q* m, i7 K ^$ ` qm-1*rm≡qm (mod n)1 o$ u0 m* P" b W9 _ W( J* z
上述等式相乘,得:" W7 s6 T# c, Y$ z) {$ t
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>& T* w' C' H, @% ]8 f8 ^3 k
a*(q1*q2*...*qm)≡rm (mod n) , n( U6 R; d! U) x1 [- T( x" u' R5 ~
如果对qi(1≤i≤m)进行如下的限定:4 Z: s4 T! D w. w0 F
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|7 z6 U) R4 L1 s
则 qm=±1* m( y! ^7 M2 q" X% i
即 a与q1*q2*...*qm互逆. l6 t" F- c( g4 ^! `
例 求28在299的逆
( x/ U' C0 ?8 c" W 28*11≡9 (mod 299): j$ Y- K2 }' \
9*33≡-2 (mod 299)
( S! \* k: F+ V/ _0 B -2*-150≡1 (mod 299), q' D4 j6 h9 U" W3 A9 s
逆为: 11*33*-150≡-32 (mod 299)
- A2 n- a% ?, r4 Q7 m' F9 r 28*-22≡-1 (mod 299); O9 `; V2 }9 O+ q4 C+ r
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
. k1 P# p1 o) J2 ~+ e s 下面给出其中一个算法:/ L y1 O& N0 e4 X9 q
1 输入a,n + L% I, \4 [# ^: o) a4 z* z
2 resulte = 1 ; 保存逆的结果
- a6 q$ ?# M2 O 3 r=n/a+1 ; 保证 r*a>n
( ~) u" |+ x/ Y, o7 S, } 4 q=r*a-n ; 得到余数,该余数小于a
# f2 z$ X' `% Y1 m: o! D$ k; ~ 5 resulte=(resulte*r)%n
7 x5 o0 X4 Y8 T 6 if q=1 then print(逆为: resulte) return resulte/ j2 g5 w6 v% A. @( q+ S. T& Q, E; g
7 if q=0 or q=a then print(存在因子: a) return a ;; z x# l" p0 d3 q2 @7 [) q! ~, r
8 a=q
9 R2 E+ m1 L6 `+ u/ T; _$ y 9 goto 3
: {# Q9 [) Z; P' {( c' z3 ~( e/ {9 T! W4 O* I
|
zan
|