跳转至

Gosper's Hack

Gosper's Hack 是一种生成 \(n\) 元集合所有 \(k\) 元子集的算法 \((0<k\lt n)\),即求组合数 \(C_{n}^{k}\) 的所有情形。

void gospersHack(int k, int n) {
    int cur = (1 << k) - 1;
    int limit = (1 << n);
    while (cur < limit) {
        // do something
        int lb = cur & -cur;
        int r = cur + lb;
        cur = (((r ^ cur) >> 2) / lb) | r;
    }
}