当前位置:首页 > 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)中有重要应用。

分享给朋友:

相关文章

react diff算法实现

react diff算法实现

React Diff 算法实现原理 React 的 Diff 算法(Reconciliation)是虚拟 DOM(Virtual DOM)更新的核心机制,通过高效比较新旧虚拟 DOM 树的差异,最小化…

php实现算法

php实现算法

PHP 实现常见算法的方法 PHP 可以实现多种算法,包括排序、搜索、递归、动态规划等。以下是几种常见算法的 PHP 实现方式。 冒泡排序(Bubble Sort) 冒泡排序通过多次遍历数组,…

php 实现算法

php 实现算法

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

php 实现共识算法

php 实现共识算法

PHP 实现共识算法的基础方法 共识算法是分布式系统中确保数据一致性的核心机制,PHP 可通过特定设计实现简化版本的共识逻辑。以下是常见实现方式: 基于Paxos的简化实现 Paxos 算法的 P…