gpt4 book ai didi

php - Python 与 PHP 速度

转载 作者:太空狗 更新时间:2023-10-29 17:55:14 24 4
gpt4 key购买 nike

我想解决 Project Euler 的问题(顺便说一句,问题 25),我在 Python 中找到了解决方案:

fibonacci = 1
old1 = 0
old2 = 1
limit = 1000

i = 1

while len(str(fibonacci)) < limit:
fibonacci = old1 + old2
old1 = old2
old2 = fibonacci
i = i + 1

print(i)

计算耗时1.5秒。

我在 PHP 中实现了相同的代码,这是代码:

$fibonacci = 1;
$old1 = 0;
$old2 = 1;
$limit = 1000;

$i = 1;

while (strlen((string)$fibonacci) < $limit){
$fibonacci = $old1 + $old2;
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
print($i);

而且花了30多分钟,还在计算...

我知道 Python 被认为比 PHP 更快,但两者之间的差异应该不会太大。如果有办法的话,如何改进我的 PHP 代码以更快地获得结果?

编辑:

我根据下面的评论编辑了这篇文章,所以首先我的解决方案是行不通的。一种解决方案可以代替旧的解决方案来放置这个解决方案:

while (strlen(number_format($fibonacci, 0, '', '')) < $limit){ ... }

但这又是一个很大的速度问题。

所以最终的解决方案是使用BCMath :

$fibonacci = '1';
$old1 = '0';
$old2 = '1';
$limit = 1000;

$i = 1;

while (strlen($fibonacci) < $limit){

$fibonacci = bcadd($old1, $old2);
$old1 = $old2;
$old2 = $fibonacci;
$i = $i + 1;
}
echo $fibonacci . "<br />";
print($i);

因此您可以在 PHP 中以与 Python 相同的速度获得结果。

最佳答案

毫无疑问,PHP 将进入无限循环。如果没有什么问题,不可能花那么长时间......

我不认为用 strlen 计算这些数字的位数会在 PHP 中起作用。 PHP 处理科学记数法中的数字,精度低于 Python。

我在 PHP 中添加了调试 echo 语句,以便为每个步骤打印出 $fibonacci 和 $i。

一个典型的 Python 行看起来像

fib is 7540113804746346429
i is 92

在 PHP 中,这是

fib is 7.54011380475E+18
i is 92

要在 PHP 中完成此操作,您可能需要使用精度更高的数学库。

查看 http://www.php.net/manual/en/book.bc.php - 你可以使用 bcadd 函数来完成加法,它会像在 Python 中一样工作。

关于php - Python 与 PHP 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4163070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com