- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。
3 x' f; |5 N. Q设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m- i% n' B4 Y7 x! N3 v
a*r1≡q1 (mod n)
# Y2 S* Q, Q3 W# ^4 u8 V% o q1*r2≡q2 (mod n)
7 M, j' s- j2 H. U; r0 d& F q2*r3≡q3 (mod n)
* w+ t+ A% V: c3 h .: e3 ^: M: _% H9 [9 L8 ~
.
' p8 F4 }$ C/ f6 e& N! i* w9 Y2 D .: S. Q; H# |6 g! ~5 l! x3 \- x% s, B0 V
qm-1*rm≡qm (mod n)- n2 o: h1 m7 z6 f
上述等式相乘,得:
( m+ v; h" q! G a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>
* B; J$ ^. P1 F6 `6 d! D! r, b1 j a*(q1*q2*...*qm)≡rm (mod n)
3 ~3 h: ^( u9 a6 { 如果对qi(1≤i≤m)进行如下的限定:
3 ]9 P. e5 [5 i; r/ D K a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
0 K, I/ a7 c4 I& ^$ U3 S 则 qm=±1
) I# {1 l; y$ }. L9 X7 F 即 a与q1*q2*...*qm互逆- [ d) q! j5 B; K6 o1 T/ g9 T
例 求28在299的逆+ @2 D1 v" j0 X0 C* V9 F' z
28*11≡9 (mod 299); R* w) G, x7 f+ S& s+ H
9*33≡-2 (mod 299)
: c0 Q( ^( T+ a4 M8 E$ u0 r8 |3 H -2*-150≡1 (mod 299)
. W6 z, e3 U: M l 逆为: 11*33*-150≡-32 (mod 299)8 t( o) N G0 F/ G
28*-22≡-1 (mod 299)4 V: T0 d% X# h/ _/ J8 A+ f4 a
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。' [ c+ x! Y' S2 P/ g
下面给出其中一个算法:: P" Z+ M- s+ g. C
1 输入a,n ( d) |$ w) a! r" i
2 resulte = 1 ; 保存逆的结果
2 c( g" Z' J8 g8 `) _. ^ 3 r=n/a+1 ; 保证 r*a>n, s" V$ Q& q6 [/ `: z0 u! D: v
4 q=r*a-n ; 得到余数,该余数小于a
% a3 G1 [2 a% E* c3 W% | 5 resulte=(resulte*r)%n , a. x+ l1 k/ e$ l4 g5 ^1 [
6 if q=1 then print(逆为: resulte) return resulte, d/ d* p! g/ J
7 if q=0 or q=a then print(存在因子: a) return a ;
5 X5 ~" {5 e0 U+ k 8 a=q
9 ]4 R; G6 e7 }$ ^- T6 y" l" [/ G4 j 9 goto 3
$ F3 m1 R3 k3 _( O8 e5 X2 A9 L# g) R; I
|
zan
|