- 在线时间
- 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
 |
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。$ j3 T' t( {2 e. Z( k5 S1 F
设 (a,n)=1 (ri,n)=1 (qi,n)=1 1≤i≤m: S, m: M& f, }+ `) `. ^
a*r1≡q1 (mod n)) c% q3 H$ i0 f l3 h- `1 p
q1*r2≡q2 (mod n)9 k$ M( a% y& h+ c K
q2*r3≡q3 (mod n)# {' r5 `6 W9 `) l
.4 y8 u! U6 V* \+ w
.+ I: G$ C9 e8 n
.# P! c$ W: x. p8 r" E' l
qm-1*rm≡qm (mod n)6 L. b% o4 V* J/ q8 B& W O ~# C
上述等式相乘,得:% P) m4 S7 l( U; k
a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>
- y8 F9 Q$ }) s/ a3 l W7 ]/ E a*(q1*q2*...*qm)≡rm (mod n)
: w$ I \- t6 V. F( b 如果对qi(1≤i≤m)进行如下的限定:
* i3 C: l& O7 C: X7 Z% | a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|8 Z% F! X' i" w$ q
则 qm=±1
0 R/ f- Q! C, a8 t' k& p- Q 即 a与q1*q2*...*qm互逆: O R0 E( s8 h- W) `' Z! ~
例 求28在299的逆
% C0 f# O( g" u3 @ 28*11≡9 (mod 299)
$ j! S9 S' S9 Z& Z5 `, I 9*33≡-2 (mod 299)
/ l7 X6 a9 V& X. g -2*-150≡1 (mod 299)
- I# K( A6 c* f" e 逆为: 11*33*-150≡-32 (mod 299)
4 |4 q; T( |4 ^! O 28*-22≡-1 (mod 299)
- f" G# {2 G" C7 Q, l% G 但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。0 w+ x& g* K' r D
下面给出其中一个算法:
6 c# N0 ~- a$ z$ a0 b2 n 1 输入a,n " a3 p7 f* p1 a; F9 I9 {$ ?; E0 d
2 resulte = 1 ; 保存逆的结果
% a6 U7 Z# A0 K; S* i: v 3 r=n/a+1 ; 保证 r*a>n7 K p+ `, e8 t5 Z4 g5 x, n
4 q=r*a-n ; 得到余数,该余数小于a* q# J- Y) z# A; a7 y
5 resulte=(resulte*r)%n
9 b$ F8 P- [! y1 F/ B6 i/ u4 z$ u 6 if q=1 then print(逆为: resulte) return resulte
0 A3 ]1 n7 n: X6 r: B) z H) v" X 7 if q=0 or q=a then print(存在因子: a) return a ;" S' `5 f4 Q% q' A8 o- K' @
8 a=q- }" e: a! P) j$ n
9 goto 3
3 z5 w7 _9 X( K- |% L
2 U- ~8 L) g" W& C6 l3 _% h! G9 ? |
zan
|