- 在线时间
- 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 a% s1 H9 S9 V6 u3 r6 M1 E' j
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
2 N U/ x# b9 H0 N' h# u2 s a*r1≡q1 (mod n)" g ^; n% k2 q/ A3 N! }, L5 k$ w
q1*r2≡q2 (mod n)
- x; P+ h0 y" H" c) V8 Z q2*r3≡q3 (mod n)& A! L! @; D% e C! o
.
! Z* U% s3 K8 y5 M+ E2 C) N .. n, A9 N7 t1 V
./ F7 g$ _7 k" l6 m! r% U
qm-1*rm≡qm (mod n)( j% d4 P/ K4 T1 v0 C n0 @/ Q
上述等式相乘,得:0 ^6 }; ~0 L' O: N
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>7 t$ v; P# H8 d% X
a*(q1*q2*...*qm)≡rm (mod n) * C- Q8 X+ D5 @% _: n9 K' K
如果对qi(1≤i≤m)进行如下的限定:/ w4 h! a9 P0 d7 y [/ S3 E) E1 _
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|, ]! Q: n4 I+ I+ N1 F( R% X
则 qm=±1- E3 u- Z( ]9 F- ` I4 ]" T- x
即 a与q1*q2*...*qm互逆, A) n9 X5 f9 e% U7 ?$ f Z1 o/ l
例 求28在299的逆
8 K+ n: X- r) I4 o0 f# I2 T) u 28*11≡9 (mod 299)
) f% g* w- z" a6 Y% B 9*33≡-2 (mod 299) G1 s# @; d1 W6 D
-2*-150≡1 (mod 299)
/ W9 D; s% c0 }4 _9 \- f0 W( s 逆为: 11*33*-150≡-32 (mod 299)
0 ?$ K. L; v2 h" q. e 28*-22≡-1 (mod 299); W* @' t! @7 z* @' j6 K Z4 w
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。# K0 S! B( U" |
下面给出其中一个算法:
$ p/ Q- h' i% m6 M, x 1 输入a,n
- o/ i- r9 f, C" B 2 resulte = 1 ; 保存逆的结果
4 R* q1 n8 Z* _2 K) S6 @% n+ X 3 r=n/a+1 ; 保证 r*a>n
' i$ u" @3 G! b* o- r* h& i7 r 4 q=r*a-n ; 得到余数,该余数小于a' V5 w+ q& T6 e' W& Y
5 resulte=(resulte*r)%n
9 z! }. p) {- S 6 if q=1 then print(逆为: resulte) return resulte& T8 D# ?7 x( Q8 }- N/ ]5 \; H
7 if q=0 or q=a then print(存在因子: a) return a ;" z& c0 Y( i% d, C0 R
8 a=q+ }* X8 g2 X7 P {/ _; N
9 goto 3 C. R" F% ]% D
o: S1 s- M% o3 @$ r% |. l W% V |
zan
|