PHP数组产品组合

PHP数组产品组合,php,arrays,multiplication,Php,Arrays,Multiplication,我已经产生了一系列的素数因子——这应该是最难的部分!然而,为了创建一个相同数字的除数列表,需要以各种可能的方式组合素数因子。这是我一直在努力用php做的事情 例如,我有一个数组: 2 2 2 3 3 41 53 ……电话号码156456;把它们都乘在一起,你就回到了数字。我需要做的是将所有duo相乘,例如2x2、2x3、2x53等,然后将所有三元组相乘,依此类推,直到最后将7个六元组相乘 如你所见,这将给出一个非常大的数组,其中包含,4,6,8,9,12等中的所有除数,还有许多重复项。我似乎无

我已经产生了一系列的素数因子——这应该是最难的部分!然而,为了创建一个相同数字的除数列表,需要以各种可能的方式组合素数因子。这是我一直在努力用php做的事情

例如,我有一个数组:

2
2
2
3
3
41
53
……电话号码156456;把它们都乘在一起,你就回到了数字。我需要做的是将所有duo相乘,例如2x2、2x3、2x53等,然后将所有三元组相乘,依此类推,直到最后将7个六元组相乘


如你所见,这将给出一个非常大的数组,其中包含,4,6,8,9,12等中的所有除数,还有许多重复项。我似乎无法从上面的数组中得到我想要的除数数组。这是一个将数组中所有可能的元素组合相乘的例子,是否有php函数用于此,我的搜索到目前为止没有结果?

在阅读此页之后:,我尝试构建一些可能有效的解决方案,它可能不是最有效的解决方案,并且在阅读此页之后,它也仅限于
count($primes),我试图构建一些可能有效的解决方案,但它可能不是最有效的解决方案,而且也仅限于使用
count($primes)来删除重复项。没有这样的官方PHP函数。您必须编写自己的算法。或者你可以试着找到一个开源实现。谁能给我一个正确的方向,我的猜测是我找出数组中有多少个元素,然后循环通过,所以对于上面的我会有6个循环,在那里我引入了duo,然后引入了三元组等,但仍然不确定如何实现我看不出你想要什么。你说的双人,三胞胎,7块6块是什么意思?也许你可以澄清这一段?用于删除重复项没有这样的官方PHP函数。您必须编写自己的算法。或者你可以试着找到一个开源实现。谁能给我一个正确的方向,我的猜测是我找出数组中有多少个元素,然后循环通过,所以对于上面的我会有6个循环,在那里我引入了duo,然后引入了三元组等,但仍然不确定如何实现我看不出你想要什么。你说的双人,三胞胎,7块6块是什么意思?也许你可以澄清那一段?我能说什么,完美。我来看看第一个数字是什么,它有32个以上的素数因子,但除此之外,它很好地回答了这个问题。谢谢…实际上它必须是2^33,即8589934592,这是我需要去的最高点,问题解决了。我能说什么,完美。我来看看第一个数字是什么,它有32个以上的素数因子,但除此之外,它很好地回答了这个问题。谢谢…实际上它必须是2^33,也就是8589934592,这是我需要去的高度,问题解决了。
$primes = Array(2, 2, 2, 3, 3, 41, 53);
$num_primes = count($primes); // 7, if this is over 32, it won't work on 32bit systems
$divisors = Array();

// number of possible combinations
$limit = pow(2, $num_primes) - 1; // 127

// count a number up and use the binary 
// representation to say which index is
// part of the current divisor
for($number = 0; $number <= $limit; $number++) {
    $divisor = 1;
    // only multiply activated bits in $number to the divisor
    for($i = 0; $i < $num_primes; $i++) {
        $divisor *= ($number >> $i) & 1 ? $primes[$i] : 1;
    }
    $divisors[] = $divisor;
}

echo implode(", ", array_unique($divisors));
1, 2, 4, 8, 3, 6, 12, 24, 9, 18, 36, 72, 41, 82, 164, 328, 123, 246, 492,
984, 369, 738, 1476, 2952, 53, 106, 212, 424, 159, 318, 636, 1272, 477,
954, 1908, 3816, 2173, 4346, 8692, 17384, 6519, 13038, 26076, 52152, 19557,
39114, 78228, 156456
7 bit
<----->
0000000    0
0000001    1
0000010    2
0000011    3
0000100    4
0000101    5
0000110    6
0000111    7
0001000    8
0001001    9
...
1111110  126
1111111  127