diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-12-21 17:38:19 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-12-21 17:38:19 +0100 |
| commit | 32cce8fe6a4b35d24d6a63b3226daee2a2753684 (patch) | |
| tree | 6409e8f25209c5719ab17d158f242085b8d1fe9a | |
| parent | 7e705a3342bc36f9f02b4e8e0050bc5842a62f9b (diff) | |
| download | zmodn-32cce8fe6a4b35d24d6a63b3226daee2a2753684.tar.gz zmodn-32cce8fe6a4b35d24d6a63b3226daee2a2753684.zip | |
Added power operator
| -rwxr-xr-x | test | 8 | ||||
| -rw-r--r-- | zmodn.h | 7 |
2 files changed, 15 insertions, 0 deletions
| @@ -133,6 +133,14 @@ public: | |||
| 133 | assert_equal(n.toint(), 2); | 133 | assert_equal(n.toint(), 2); |
| 134 | } | 134 | } |
| 135 | }, | 135 | }, |
| 136 | { | ||
| 137 | .name = "2^12 mod 154", | ||
| 138 | .f = []() { | ||
| 139 | Zmod<154> b = 2; | ||
| 140 | auto p = b ^ 12; | ||
| 141 | assert_equal(p, 92); | ||
| 142 | } | ||
| 143 | }, | ||
| 136 | }; | 144 | }; |
| 137 | 145 | ||
| 138 | int main() { | 146 | int main() { |
| @@ -25,10 +25,17 @@ public: | |||
| 25 | Zmod operator+(const Zmod& z) const { return value + z.value; } | 25 | Zmod operator+(const Zmod& z) const { return value + z.value; } |
| 26 | Zmod operator-(const Zmod& z) const { return value - z.value; } | 26 | Zmod operator-(const Zmod& z) const { return value - z.value; } |
| 27 | Zmod operator*(const Zmod& z) const { return value * z.value; } | 27 | Zmod operator*(const Zmod& z) const { return value * z.value; } |
| 28 | |||
| 28 | Zmod operator+=(const Zmod& z) { return (*this) = value + z.value; } | 29 | Zmod operator+=(const Zmod& z) { return (*this) = value + z.value; } |
| 29 | Zmod operator-=(const Zmod& z) { return (*this) = value - z.value; } | 30 | Zmod operator-=(const Zmod& z) { return (*this) = value - z.value; } |
| 30 | Zmod operator*=(const Zmod& z) { return (*this) = value * z.value; } | 31 | Zmod operator*=(const Zmod& z) { return (*this) = value * z.value; } |
| 31 | 32 | ||
| 33 | Zmod operator^(decltype(N) z) const { | ||
| 34 | if (z == 0) return 1; | ||
| 35 | if (z % 2 == 0) return (((*this) * (*this)) ^ (z/2)); | ||
| 36 | return (*this) * ((*this) ^ (z-1)); | ||
| 37 | } | ||
| 38 | |||
| 32 | bool operator==(const Zmod& z) const { return value == z.value; } | 39 | bool operator==(const Zmod& z) const { return value == z.value; } |
| 33 | bool operator!=(const Zmod& z) const { return value != z.value; } | 40 | bool operator!=(const Zmod& z) const { return value != z.value; } |
| 34 | 41 | ||
