当前位置:首页 > PHP

php实现欧几里得算法实现

2026-01-30 05:21:25PHP

欧几里得算法简介

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

PHP实现方法

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

php实现欧几里得算法实现

递归实现

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

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

迭代实现

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

php实现欧几里得算法实现

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']
    ];
}

使用示例

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

$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)中有重要应用。

分享给朋友:

相关文章

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…

php 实现算法

php 实现算法

PHP 实现常见算法的方法 PHP 作为一门服务器端脚本语言,可以实现多种算法。以下是一些常见算法的 PHP 实现示例。 排序算法 冒泡排序 function bubbleSort($array)…

js实现24点算法

js实现24点算法

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

js算法实现

js算法实现

以下是JavaScript中常见的算法实现示例,涵盖排序、搜索、递归等经典场景: 排序算法 快速排序 function quickSort(arr) { if (arr.length <…

js实现火焰算法

js实现火焰算法

火焰算法实现基础 火焰算法(Fire Effect)是一种模拟火焰燃烧效果的图形算法,常用于生成动态火焰视觉效果。在JavaScript中,可以通过Canvas或WebGL实现。 使用Canvas实…

排序算法 php实现

排序算法 php实现

以下是在PHP中实现常见排序算法的几种方法,每种算法均附上代码示例和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置完成排序,时间复杂度为O(n²)。 function bubbleSort(…