Browse Source

Implement `expMod`

DricomDragon 5 năm trước cách đây
mục cha
commit
59fef5d309
1 tập tin đã thay đổi với 8 bổ sung0 xóa
  1. 8 0
      tp/rsa/main.hs

+ 8 - 0
tp/rsa/main.hs

@@ -70,3 +70,11 @@ euclide a b = let (d', u', v') = euclide b (mod a b) in (d', v', u' - (div a b)
 
 
 modInv e n = let (_, d, _) = euclide e n in d
 modInv e n = let (_, d, _) = euclide e n in d
 
 
+-- Return x ^ k (mod) n
+expMod x k n =
+	if k == 0
+		then 1
+		else if even k
+			then expMod (mod ((mod x n) * (mod x n)) n) (div k 2) n
+			else (mod x n) * expMod ((mod x n) * (mod x n)) (div k 2) n
+