- 在线时间
- 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 {7 s- ?* O5 J8 J" l: Q0 |" W设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
( P+ G: f) W& m; j+ b# j: U a*r1≡q1 (mod n)' w1 X/ z( w( P$ ^- A
q1*r2≡q2 (mod n)
X3 E* |# P, p6 h* [ q2*r3≡q3 (mod n)
) f7 X0 _* P8 L .
0 ]) Z) j% L8 S" M4 H5 {4 R3 R b/ P: P .
9 F+ l) V. Z. c: P+ }5 H0 m .# R6 F9 x! n- N6 b
qm-1*rm≡qm (mod n)% X, z, X: @4 z4 C$ b: o- l
上述等式相乘,得:: U# S- v6 D/ r% B. R( p$ h. }
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>; D- d" y+ A. S" A6 C" A, N6 f
a*(q1*q2*...*qm)≡rm (mod n) 4 R. b0 L$ d/ F9 M0 N k/ R6 I
如果对qi(1≤i≤m)进行如下的限定:
5 q: o" y5 n b, x$ v6 r a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|6 N; F% n1 E2 N$ W- ^
则 qm=±1* m/ z8 {- D" ~* s1 q( B
即 a与q1*q2*...*qm互逆
! O3 X, u1 J6 a6 U 例 求28在299的逆4 n# D5 p- w) F6 g6 _1 n2 U& L
28*11≡9 (mod 299)
) S: O' M( O) x) p 9*33≡-2 (mod 299)
6 S- r! v- P: o2 R -2*-150≡1 (mod 299)
' A% G: V# M5 K 逆为: 11*33*-150≡-32 (mod 299). \3 ~& y2 A$ P
28*-22≡-1 (mod 299)
7 a5 D- W( q. h! ^( s% m% Y3 M3 s5 Q( d 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。* Z2 e9 Y0 ~4 d; b2 e4 g0 L
下面给出其中一个算法:
6 @) {7 M" M& i# [ 1 输入a,n
7 x: f- j7 @6 I 2 resulte = 1 ; 保存逆的结果
- b' ^% r; J" Z8 ` 3 r=n/a+1 ; 保证 r*a>n0 g7 C: c, t# Y! Q+ U
4 q=r*a-n ; 得到余数,该余数小于a4 i9 q" S5 O# o8 r
5 resulte=(resulte*r)%n & _! B% n+ T n3 j
6 if q=1 then print(逆为: resulte) return resulte% O- N' `1 v+ ~2 a: j
7 if q=0 or q=a then print(存在因子: a) return a ;8 x3 Y- {1 j/ ^1 L# Z; }4 I" c
8 a=q
/ q t! B* i) M/ D 9 goto 3
9 B4 v" o+ H$ u4 C: \( O7 C9 R
* m: v. h; n# a7 M. }9 j |
zan
|