考虑以下两个数字的因素......
120:2,2,2,3,5 240:2,2,2,2,3,5
我正在尝试识别匹配的素因子对,并将它们相乘。我将每个列在两个数组中:$ factor_list_1和$ factor_list_2
使用:$commons = array_intersect_assoc($factor_list_1, $factor_list_2);
给出:Array ( [0] => 2 [1] => 2 [2] => 2 )
不正确
使用:$commons = array_intersect($factor_list_1, $factor_list_2);
给出:Array ( [0] => 2 [1] => 2 [2] => 2 [3] => 3 [4] => 5 )
正确
然而,如果我的数字是99和957,我们得到......
99:3,3,11 957:3,11,29
我正在尝试识别匹配的素因子对,并将它们相乘。我将每个列在两个数组中:$ factor_list_1和$ factor_list_2
使用:$commons = array_intersect_assoc($factor_list_1, $factor_list_2);
给出:数组([0] => 3)`
不正确
使用:$commons = array_intersect($factor_list_1, $factor_list_2);
给出:Array ( [0] => 3 [1] => 3 [2] => 11 )
不正确
我正在随机生成数字,所以任何想法都可以正确识别匹配的素数因子对吗?
答案 0 :(得分:2)
$l = array(2, 2, 2, 3, 5);
$r = array(2, 2, 2, 2, 3, 5);
$cnt_l = array_count_values($l);
$cnt_r = array_count_values($r);
$result = array();
foreach ($cnt_l as $number => $count) {
if (isset($cnt_r[$number])) {
$result = array_merge($result, array_fill(0, min($count, $cnt_r[$number]), $number));
}
}
var_dump($result);
所以你:
N
追加到结果数组答案 1 :(得分:0)
只需使用array_product(array_intersect())
。