Shankar Thiyagaraajan
Shankar Thiyagaraajan

Reputation: 1815

How to find the common divisors of two numbers in PHP?

I use the following to find out the common divisors.

But in some case the count of divisors are not satisfied.

My Code :

    $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;

Because, in some cases, it won't work.

Is this type of calculation is right ? or any suggestions ?

Upvotes: 1

Views: 1320

Answers (2)

Sehdev
Sehdev

Reputation: 5672

You can you this code to get the fastest result to find the number of common divisors between two numbers:

// 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));

Upvotes: 0

M A SIDDIQUI
M A SIDDIQUI

Reputation: 2215

As per asked in comment, to count the common factors of the two no. will be as like this.

<?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);

Upvotes: 2

Related Questions