如何在PHP中找到两个数的公约数?

时间:2017-01-30 12:58:30

标签: php

我使用以下内容找出常见的除数。

但在某些情况下,除数的数量不满意。

我的代码:

    $x = 66928;
    $y = 66992;

    $c_a = [];
    $c_b = [];
    $d = 1;
    while ($d_a <= $x) {
        if (is_int($x / $d)) $c_a[] = $d;
        $d++;
    }
    $d = 1;
    while ($d_b <= $y) {
        if (is_int($y / $d)) $c_b[] = $d;
        $d++;
    }
    echo count($c_a);
    echo count($c_b);

    // Output
     $c_a = 20;
     $c_b = 20;

因为,在某些情况下,它不会起作用。

这种类型的计算是对的吗? 或任何建议?

2 个答案:

答案 0 :(得分:2)

根据评论中的问题,要计算两者的共同因素。就像这样。

<?php
$a = 66928;
$b = 66992;
$min = ($a < $b ) ? $a : $b;
$commomn_factors_count = 0;
for ($i = 1; $i < $min/2; $i++) {
    if (($a%$i==0) && ($b%$i==0)) {
        $commomn_factors_count++;
    }
}
var_dump($commomn_factors_count);

答案 1 :(得分:0)

您可以通过以下代码获得最快的结果,以找到两个数字之间的公因数:

// Function to calculate gcd of two numbers
function gcd($a, $b)
{
    if ($a == 0)
        return $b;
    return gcd($b % $a, $a);
}
 
/* Function to calculate all common 
* divisors of two given numbers
* a, b --> input integer numbers
*/
function commDiv($a, $b)
{
    // find gcd of a, b
    $n = gcd($a, $b);
 
    // Count divisors of n.
    $result = 0;
    for ($i = 1; $i <= sqrt($n); 
                 $i++)
    {
        // if 'i' is factor of n
        if ($n % $i == 0)
        {
            // check if divisors 
            // are equal
            if ($n / $i == $i)
                $result += 1;
            else
                $result += 2;
        }
    }
    return $result;
}
 
// Driver Code
$a = 10; $b = 15;
echo(commDiv($a, $b));