数学建模社区-数学中国

标题: 一个乘法逆元的计算方法 [打印本页]

作者: songls    时间: 2023-12-10 20:02
标题: 一个乘法逆元的计算方法
以下给出一个求乘法逆元的方法,主要是使用除数的积来求逆,供大家参考,如有不足,欢迎大家批评指正。$ G2 S- z. A0 h7 j0 ?
设 (a,n)=1  (ri,n)=1  (qi,n)=1  1≤i≤m
) j5 `9 q+ q, P( K1 t  a*r1≡q1 (mod n)0 C  P% E% C6 @; ~- k1 a
  q1*r2≡q2 (mod n)
; v$ x! K8 Z3 _: ?8 x. \  q2*r3≡q3 (mod n)8 |  Z) R' s+ |# T! t
   .
. x$ y& ?' r; K0 V   .; l% B: O7 d. D6 {& h/ F- D3 E
  .8 s9 |2 B1 Q: `
  qm-1*rm≡qm (mod n)5 P' @  h! G  H
上述等式相乘,得:9 `- H. J" `$ Q4 {
  a*(r1*r2*...*rm-1)*(q1*q2*...*qm)≡r1*r2*...*rm-1*rm (mod n) =>
9 P; b! [2 `/ [) w' T1 ^% u1 Q3 N; Z. X  a*(q1*q2*...*qm)≡rm (mod n)
/ r* W* L& F0 [. \$ ^+ Y  如果对qi(1≤i≤m)进行如下的限定:  S" F3 [" w5 s1 k
   a>|q1|>|q2|>...>|qi|>...>|qm-1|>|qm|
" M  I* H% i1 j# V9 q% {   则 qm=±1. Z' x+ P/ e5 B# O" B7 @3 Z
  即 a与q1*q2*...*qm互逆
) b% J1 I: u4 c1 t* X! u0 K* V  例 求28在299的逆
0 T+ u8 A$ W9 K     28*11≡9 (mod 299); b3 p9 M8 ^4 Q, v
     9*33≡-2  (mod 299)$ E' }5 @* L6 X; t* U, k& w
     -2*-150≡1 (mod 299)
( ^, u! M% F) h- C* ~+ F8 ?( ]  逆为:    11*33*-150≡-32 (mod 299)+ s0 t4 T0 f5 T* `! g
     28*-22≡-1 (mod 299)/ v7 X8 Q0 O8 w9 H" O
  但该方法有个最大的问题,当(qi,n)>1时,该方法将无法继续往下计算逆。
/ |0 P0 B3 i2 K0 K" J% H6 O$ P! U; I 下面给出其中一个算法:
+ {. c. Y7 r0 u) S. i. E  1    输入a,n  8 b8 B7 h& N0 l" R' t4 \* r
  2   resulte = 1   ; 保存逆的结果
. r7 K' u$ G) m) h! S6 u- C  3   r=n/a+1      ; 保证 r*a>n" c2 z$ Q! ^3 h! ]/ E7 A
  4  q=r*a-n       ; 得到余数,该余数小于a% q2 X) R+ }0 n# {; L* S# F! {' Y
  5  resulte=(resulte*r)%n   ( t' l% J/ _  P% X
  6  if q=1  then  print(逆为: resulte) return  resulte
+ s4 p7 o' O9 \! l3 F  7  if q=0 or q=a then  print(存在因子: a)  return a ;% l/ Y8 p. V- q  z# ]' Z7 E. o) X  y" M9 p
  8  a=q8 w  y9 J1 Z7 r& l' l
  9  goto 3
3 `5 n! R3 r* i2 G1 v* W) n' Q' o; d0 ~! ^

一个求乘法逆元的方法.pdf

39.85 KB, 下载次数: 0, 下载积分: 体力 -2 点






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5