Loop Loop с несколькими условиями

Может ли цикл do-while иметь несколько условий? Если это так, я не могу понять, почему приведенный ниже код не работает на всех, кроме первого условия.

Используемые функции …

function gcf($a,$b) { $a = abs($a); $b = abs($b); if( $a < $b) list($b,$a) = Array($a,$b); if( $b == 0) return $a; $r = $a % $b; while($r > 0) { $a = $b; $b = $r; $r = $a % $b; } return $b; } function factors($n){ $factors_array = array(); for ($x = 1; $x <= sqrt(abs($n)); $x++) { if ($n % $x == 0) { $z = $n/$x; array_push($factors_array, $x, $z); } } return $factors_array; } 

Код…

 $a = $b; do{ $a = mt_rand(8, 100); $a_factors_array = factors($a); $b = mt_rand(8, 100); $b_factors_array = factors($b); } while ($a == $b && count($a_factors_array) < 4 && count($b_factors_array) < 4 && gcf($a, $b) == 1); echo $a . '<br>'; echo $b . '<br>'; echo count($a_factors_array) . '<br>'; echo count($b_factors_array) . '<br>'; echo gcf($a, $b) . '<br>'; 

Я продолжаю получать цифры для $ a и $ b, которые имеют менее 4 факторов и имеют GCF 1. Любые идеи?