当前位置:首页 > PHP

php实现欧几里得算法实现

2026-01-30 05:21:25PHP

欧几里得算法简介

欧几里得算法(辗转相除法)用于计算两个非负整数的最大公约数(GCD)。其核心思想是通过反复用较小数除较大数取余,直到余数为0,此时的除数即为最大公约数。

PHP实现方法

以下是用PHP实现欧几里得算法的几种方式:

递归实现

通过函数递归调用自身,直到满足终止条件(余数为0):

function gcd_recursive($a, $b) {
    if ($b == 0) {
        return $a;
    }
    return gcd_recursive($b, $a % $b);
}

迭代实现

使用循环代替递归,避免递归可能导致的栈溢出问题:

function gcd_iterative($a, $b) {
    while ($b != 0) {
        $temp = $a % $b;
        $a = $b;
        $b = $temp;
    }
    return $a;
}

扩展欧几里得算法

计算GCD的同时,找到满足贝祖等式(ax + by = gcd(a,b))的整数x和y:

function extended_gcd($a, $b) {
    if ($b == 0) {
        return ['gcd' => $a, 'x' => 1, 'y' => 0];
    }
    $result = extended_gcd($b, $a % $b);
    return [
        'gcd' => $result['gcd'],
        'x' => $result['y'],
        'y' => $result['x'] - floor($a / $b) * $result['y']
    ];
}

使用示例

调用上述函数并输出结果:

php实现欧几里得算法实现

$a = 48;
$b = 18;

echo "递归GCD: " . gcd_recursive($a, $b) . "\n";
echo "迭代GCD: " . gcd_iterative($a, $b) . "\n";

$extended = extended_gcd($a, $b);
echo "扩展GCD: {$extended['gcd']}, x={$extended['x']}, y={$extended['y']}";

注意事项

  • 输入参数应为非负整数,负数需先取绝对值。
  • 递归实现简洁但可能受限于调用栈深度,大数计算建议使用迭代方式。
  • 扩展欧几里得算法在密码学(如RSA)中有重要应用。

分享给朋友:

相关文章

蚁群算法js实现

蚁群算法js实现

蚁群算法简介 蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的启发式算法,常用于解决组合优化问题(如旅行商问题TSP)。蚂蚁通过信息素(pheromone)…

js实现贪心算法

js实现贪心算法

贪心算法简介 贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而希望导致结果是全局最优的算法。贪心算法常用于解决优化问题,如最短路径、最小生成树等。 贪心算法的基本步骤 贪心算…

用js来实现所有算法

用js来实现所有算法

在 JavaScript 中实现所有算法是一个庞大的任务,因为算法种类繁多,涵盖数据结构、排序、搜索、图论、动态规划等多个领域。以下是部分常见算法的 JavaScript 实现示例,供参考: 排序算…

用JS实现快速排序算法

用JS实现快速排序算法

快速排序的原理 快速排序是一种分治算法,通过选择一个基准元素(pivot)将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 代码实现 function quickS…

js实现24点算法

js实现24点算法

24点算法简介 24点游戏的目标是通过加、减、乘、除四则运算,将4个数字组合成结果为24的表达式。以下是基于JavaScript的实现方法。 基本思路 排列组合:生成所有可能的数字排列顺序。 运…