数组元素的唯一产品
Unique products of array elements
我有一个数组,例如[3 5 7 11]
。我想找出这些元素的唯一倍数,即
成对元素的乘积 -- 15, 21, 33, 35, 55, 77
三个元素的乘积 -- 105, 385, 231
四元素的乘积 -- 1055.
我目前对如何以有效的方式处理它感到困惑,以便当我将它扩展到数组中的更多元素时,我不会爆炸我的内存并杀死我的计算机。
我当前的代码:
prime_factor=[3 5 7 11];
for i=1:length(prime_factor)
pfm=unique([pfm cumprod(circshift(prime_factor,i,2))])
endfor
魔法函数是nchoosek
,nchoosek(v,k)
从输入向量v
中产生k
个元素的所有组合。只需计算输出行的乘积即可获得所需结果:
v = [3 5 7 11];
prod(nchoosek(v,2),2)
产量:
ans =
15
21
33
35
55
77
prod(nchoosek(V,3),2)
产量:
ans =
105
165
231
385
prod(nchoosek(V,4),2)
产量:
ans =
1155
我有一个数组,例如[3 5 7 11]
。我想找出这些元素的唯一倍数,即
成对元素的乘积 -- 15, 21, 33, 35, 55, 77
三个元素的乘积 -- 105, 385, 231
四元素的乘积 -- 1055.
我目前对如何以有效的方式处理它感到困惑,以便当我将它扩展到数组中的更多元素时,我不会爆炸我的内存并杀死我的计算机。
我当前的代码:
prime_factor=[3 5 7 11];
for i=1:length(prime_factor)
pfm=unique([pfm cumprod(circshift(prime_factor,i,2))])
endfor
魔法函数是nchoosek
,nchoosek(v,k)
从输入向量v
中产生k
个元素的所有组合。只需计算输出行的乘积即可获得所需结果:
v = [3 5 7 11];
prod(nchoosek(v,2),2)
产量:
ans =
15
21
33
35
55
77
prod(nchoosek(V,3),2)
产量:
ans =
105
165
231
385
prod(nchoosek(V,4),2)
产量:
ans =
1155