modular_exponentiation.sf 467 B

1234567891011121314151617181920212223
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Modular_exponentiation
  4. #
  5. func expmod(a, b, n) {
  6. var c = 1
  7. do {
  8. (c *= a) %= n if b.is_odd
  9. (a *= a) %= n
  10. } while (b >>= 1)
  11. c
  12. }
  13. var result = expmod(
  14. 2988348162058574136915891421498819466320163312926952423791023078876139,
  15. 2351399303373464486466122544523690094744975233415544072992656881240319,
  16. 10**40)
  17. assert_eq(result, 1527229998585248450016808958343740453059)
  18. say result