- 在线时间
- 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 X2 B1 B3 R$ ]3 O( g- p
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m
" ]5 A* e8 `6 ]1 R* N$ A a*r1≡q1 (mod n)
: {4 f8 J$ j# X. I9 O- S q1*r2≡q2 (mod n)5 ?: \- o' t7 ]7 ]
q2*r3≡q3 (mod n)
4 t2 `% B7 U5 J+ M .
8 V$ I' ?" C! G7 L/ w* k! ? .
8 U0 B& G" R9 g ./ ?8 s# V" L& E5 ~5 W% v
qm-1*rm≡qm (mod n)$ [( a/ V7 J$ [4 _; n. f" q; g
上述等式相乘,得:5 V7 b Q2 R7 K: e' ^! b
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>1 { q! m! t- ?# H8 ]5 E/ e+ O
a*(q1*q2*...*qm)≡rm (mod n)
6 L% @# ^: |" @9 O2 ^8 U 如果对qi(1≤i≤m)进行如下的限定:7 J4 M1 B, |. E1 c0 x( D
a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|, @' t9 r' d* D+ a0 q+ i# C
则 qm=±1; q, f7 J; W; i5 ]- A5 S! _
即 a与q1*q2*...*qm互逆# D& y' z. v* s7 n
例 求28在299的逆+ C# Y6 t) \. v1 A" f. `. K3 ]) O2 m
28*11≡9 (mod 299)% O/ Q, c) A Z% I- M1 P
9*33≡-2 (mod 299)
% W$ ]8 W- e% l/ z -2*-150≡1 (mod 299)
% D& [* {, {$ f/ ?* j+ Y 逆为: 11*33*-150≡-32 (mod 299)+ I) M4 D Y, c; ?' J
28*-22≡-1 (mod 299) G. J [: K5 e# T6 `
但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。+ G. a+ \) ~0 v! @) q
下面给出其中一个算法:; z; k6 f' p9 e+ W; \
1 输入a,n . ^6 K5 G3 K5 e( B; N; v
2 resulte = 1 ; 保存逆的结果 $ n r" d6 H# [ u5 m
3 r=n/a+1 ; 保证 r*a>n
; J' l4 x9 z! D- t+ p 4 q=r*a-n ; 得到余数,该余数小于a
. }- |# j# ~! C$ u3 i; L$ D 5 resulte=(resulte*r)%n
3 a# k% s( z O 6 if q=1 then print(逆为: resulte) return resulte
9 X3 V. H3 f9 ?6 T: J& r 7 if q=0 or q=a then print(存在因子: a) return a ;' \& Z8 W$ t, Y& `
8 a=q& K- F$ M# t% P
9 goto 3
9 Q* [ E0 I- |; l$ o: `
) x. x' z4 B7 q/ w0 I' z) N* Y0 |$ d |
zan
|