有没有一种舒适的方法可以在 PARI/GP 中生成 n 中的 k 组合?

Pet*_*ter 3 function pari pari-gp

假设我在 PARI/GP 中有一个包含 n 个元素的向量。

我想从 n 个元素中生成 k 个组合。

例如,如果向量为 [3,7,11,14,18] 且 k=3,则输出应为

[3,7,11]
[3,7,14]
[3,7,18]
[3,11,14]
[3,11,18]
[3,14,18]
[7,11,14]
[7,11,18]
[7,14,18]
[11,14,18]
Run Code Online (Sandbox Code Playgroud)

PARI/GP 中是否有命令执行此操作,或者我是否必须对该功能进行编程?

Pio*_*nov 5

不幸的是,PARI 没有内置命令来完成您需要的所有操作。

函数forvec(flag = 2)非常适合组合问题。所以你的函数可以如下所示:

subsets(A, k) = {
   my (lst = List());
   forvec(v = vector(k, i, [1, #A]), listput(lst, vecextract(A, v)), 2);

   Vec(lst)
};

subsets([3,7,11,14,18], 3)
gp> [[3,7,11], [3,7,14], [3,7,18], [3,11,14], [3,11,18], [3,14,18], [7,11,14], [7,11,18],
     [7,14,18], [11,14,18]]
Run Code Online (Sandbox Code Playgroud)