【发布时间】:2017-03-12 04:08:15
【问题描述】:
我正在尝试创建一个函数来查找两个值的 HCF。我目前有一个函数可以找到每个值的所有主要因素并将它们返回到一个数组中。要找到 HCF,所要做的就是比较每个数组中的相似值,然后将它们相乘。
我的代码目前如下所示:
function hcf($x, $y) {
$hcf = array_product(array_intersect(prm_fac($x), prm_fac($y)));
if ($hcf != 0)
return $hcf;
else
return 1;
这很难解释,所以我举个例子来说明问题:如果我尝试找到 10 和 8 的 HCF,10 的质因数将是 2、5; 8 的质因数将是 2, 2, 2。两个数组中的相似值将是 2。
但是,当我使用 array_intersect 函数时,它会获取 2 的所有匹配项,而不仅仅是它相交的单个匹配项。所以我不会得到 2,而是得到 2、2、2。我该如何解决这个问题?
这是另一个例子:我需要找到 4 和 16 的 HCF。4 的质因数是 2、2; 16 的主要因数是 2、2、2、2。我需要找出两个数组的哪些值相同。如果我在两个数组上都使用 array_intersect,它会给我 2、2、2、2 而不是 2、2。我该如何解决这个问题?
这里是 prm_fac 函数:
function prm_fac($n) {
$factors = array();
while ($n % 2 == 0) {
$factors[] = 2;
$n /= 2;
}
for ($i = 3; $i <= sqrt($n); $i += 2) {
while ($n % $i == 0) {
$factors[] = $i;
$n /= $i;
}
}
if ($n != 1)
$factors[] = $n;
return $factors;
}
【问题讨论】:
-
可能你的 prm_fac() 函数不正确。
标签: php arrays function sorting comparison