diff options
Diffstat (limited to '')
| -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 | ||
