如何使用(**)运算符而不是pow实现相同的功能

问题描述 投票:0回答:1

我正在尝试参与编码challenge,对于大数我需要对(10 ^ 9 + 7)取模。由于该网站仅支持ruby 2.3.1版本,因此我无法使用pow()function。当我尝试使用(**)运算符解决相同的问题时。它给了我无限。所以,我的问题是

1)(**)和pow运算符之间到底有什么区别

2)我需要一种方法来实现pow运算符提供的相同功能

下面是程序

mod = ((10 ** 9) + 7)
q = gets.to_i
while q != 0 do
  n = gets.to_i
  if (n % 2 == 0 || n == 1)
    puts 0
  else
    val = (n - 3)/2
    puts 2.pow(val, mod)
    ### now If I do puts (2 ** ( val % mod)) it will give me infinite
  end
  q -= 1
end

输入q = 3

n-将是非常大的数字,例如899187440761857221或889644209960741769

如果我在本地计算机上运行程序,则可以运行它,因为我使用的是ruby最新版本,而在网站上它们支持2.3.1版本

任何帮助将不胜感激

ruby modulo
1个回答
0
投票

  def pow_with_modulus(base, exponent, modulus)
    return 0 if modulus == 1

    res = 1
    exponent.times do
      res = (res * base) % modulus
    end

    res
  end
© www.soinside.com 2019 - 2024. All rights reserved.