俄羅斯乘法又稱古埃及乘法,利用二進制分解原理計算兩數相乘:
範例:35 × 72
左欄 右欄 35 72 ← 奇數,累加 72 17 144 ← 奇數,累加 144 8 288 ← 偶數,忽略 4 576 ← 忽略 2 1152 ← 忽略 1 2304 ← 奇數,累加 2304 總和:72 + 144 + 2304 = 2520
<?php
function russian($m, $n, $res = 0) {
// $n 最低位為 1(奇數)時累加 $m
(1 == ($n & 1)) && $res += $m;
// 左移 1 位相當於乘 2,右移 1 位相當於除 2
$m = $m << 1;
$n = $n >> 1;
return $n ? russian($m, $n, $res) : $res;
}
echo russian(7, 8); // 輸出 56
?>
$n & 1 判斷奇數(最低位為 1)。$m <<= 1 等價 $m *= 2;$n >>= 1 等價 floor($n / 2)。$n === 0 時返回累加結果 $res。function russian_iter($m, $n) {
$res = 0;
while ($n > 0) {
if ($n & 1) $res += $m;
$m <<= 1;
$n >>= 1;
}
return $res;
}