我正在尝试参与编码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版本
任何帮助将不胜感激
def pow_with_modulus(base, exponent, modulus)
return 0 if modulus == 1
res = 1
exponent.times do
res = (res * base) % modulus
end
res
end