浏览代码

Implement `expMod`

DricomDragon 5 年之前
父节点
当前提交
59fef5d309
共有 1 个文件被更改,包括 8 次插入0 次删除
  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
 
+-- 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
+