From 24b32ea66c4510f443d8fabebf89f7a77e4baccb Mon Sep 17 00:00:00 2001 From: Supragya Raj Date: Mon, 1 Jul 2024 23:31:42 +0530 Subject: [PATCH] cleaner: reuse .pow() code --- src/field/prime/mod.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/field/prime/mod.rs b/src/field/prime/mod.rs index b524002..745f68c 100644 --- a/src/field/prime/mod.rs +++ b/src/field/prime/mod.rs @@ -114,19 +114,12 @@ impl const FiniteField for PrimeField

{ if self.value == 0 { return None; } - let exponent = Self::ORDER - 2; - let mut result = Self::ONE; - let mut base = *self; - let mut power = exponent; - - while power > 0 { - if power & 1 == 1 { - result *= base; - } - base = base * base; - power >>= 1; - } - Some(result) + + // By fermat's little theorem, in any prime field P, for any elem: + // e^(P-1) = 1 mod P + // So, + // e^(P-2) = e^-1 mod P + Some(self.pow(Self::ORDER - 2)) } fn pow(self, power: usize) -> Self {