Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint32_t mul_mod(uint32_t a, uint32_t b, uint32_t m) {
- uint32_t result = 0;
- uint32_t x = b % m;
- for (int i = 0; i < 32; ++i) {
- uint32_t myBit = 31 - i;
- //~ Serial.print(i);
- //~ Serial.print(": ");
- //~ Serial.println(((a << myBit) >> 31));
- if (((a << myBit) >> 31) == 1) {
- result = (result + x) % m;
- }
- x = (x << 1) % m;
- }
- return result;
- }
- uint32_t pow_mod(uint32_t base, uint32_t power, uint32_t m) {
- uint32_t result = 1;
- uint32_t x = base % m;
- for (int i = 0; i < 32; ++i ) {
- if ((power & (1UL << i)) != 0) {
- result = mul_mod(result, x, m);
- }
- x = mul_mod(x, x, m);
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement