我试图建立一个幂函数来计算17^2147482999的幂。我试过这个代码:
function ipow($a, $b) {
if ($b<0) {
echo "B must be a positive integer";
}
if ($b==0) return 1;
if ($a==0) return 0;
if ($b%2==0) {
return ipow($a*$a, $b/2);
} else if ($b%2==1) {
return $a*ipow($a*$a,$b/2);
}
return 0;
}
函数调用:
echo ipow($a, $b);
错误:
Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\wamp\www\spoj\LASTDIG.php on line 23
还有其他方法来计算这么大的数值的幂吗?内置的pow()
函数提供了一个INF
输出。
更新
如果似乎不可能得到整个答案,那么是否有可能通过某种数学方法至少提取出答案的最后5-10位数字呢?
发布于 2011-06-08 06:04:23
您可以像这样使用bcpowmod函数:
<?php echo bcpowmod(17,2147482999,10000000000); ?>
结果是8849802353
,即17^2147482999 mod 10000000000或,17^2147482999的最后10位数是8849802353。
发布于 2011-06-08 05:39:17
您不能用普通的PHP经验性操作来实现这一点。这超出了整数的范围,甚至在64位系统上也是如此。
您需要使用bcmath扩展和bcpow
函数。(如果这不起作用的话,甚至连gmp
都不行。)
print bcpow(17, 2147482999);
发布于 2011-06-08 05:45:21
其结果值按1e+2642368139的顺序排列,比大多数库中的值要大得多。如果您需要一些近似,可以使用一些对数逻辑:
17^2147482999 = 10^(log(17^2147482999))
= 10^(2147482999 * log(17))
= 10^(2147482999 * 1.23045)
= 10^(2642368139.79773)
= 10^2642368139 * 10^0.79773
= 6.27669e+2642368139
https://stackoverflow.com/questions/6274606
复制相似问题