不同子序列的GCD数量
创始人
2025-01-10 01:31:23
0次

我们可以使用数学中的方法来解决此问题。 首先,我们需要知道一个关键的定理:如果a和b是两个整数,则它们的最大公因数的约数也是它们的GCD的约数。换句话说,gcd(a,b)的所有约数也是它们的所有不同子序列的GCD的约数。

因此,我们可以枚举所有可能的子序列,并计算它们的GCD。然后,我们可以使用上述定理来计算GCDs约数的数量,并将其相加,最后返回总和。 这个算法的时间复杂度为O(N ^ 2 log(N))。

下面是参考实现:

const int MAXN = 5 * 1e4 + 5;
const int MAXV = 1e7 + 5;
int n, a[MAXN], cnt[MAXV], vals[MAXV], p = 0;
ll res = 0;

void dfs(int cur, int g) {
    if (cur == p) {
        if (g > 1) res += cnt[g];
        return;
    }
    dfs(cur + 1, g);
    dfs(cur + 1, __gcd(g, vals[cur]));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) {
        for (int j = 1; j * j <= a[i]; j++) {
            if (a[i] % j == 0) {
                cnt[j]++;
                if (j != a[i]/j) cnt[a[i] / j]++;
            }
        }
    }
    for (int i = 1; i < MAXV; i++) {
        if (cnt[i]) vals[p++] = i;
    }
    dfs(0, 0);
    cout << res << "\n";
    return 0;
}

首先,我们扫描每个元素并计算其GCD的约数数。这可以通过对每个元素施加试除法来完成。接下来,我们迭代gcd(a,b)的所有约数,并将它们的数量相加。最后,通过使用深度优先搜索遍历所有不同子序列,并计算每个子序

相关内容

热门资讯

发现玩家透视挂!渝都麻将辅助透... 发现玩家透视挂!渝都麻将辅助透视挂,三三麻将真的有外挂,都是有挂技巧1、三三麻将脚本辅助下载、三三麻...
今日百科开挂!家家乐牌吧辅助透... 今日百科开挂!家家乐牌吧辅助透视挂,天天麻将九州真的是有外挂,果然有挂规律1、家家乐牌吧脚本辅助下载...
专业讨论辅助!海趣互娱辅助透视... 专业讨论辅助!海趣互娱辅助透视挂,皮皮湖南跑胡子是有外挂,一直详细教程1、打开软件启动之后找到中间准...
分享一款透视挂!熟人炸金花辅助... 分享一款透视挂!熟人炸金花辅助透视挂,好玩贰柒拾是真的有外挂,都是有挂透明挂好玩贰柒拾能透视中分为三...
截至目前辅助!禾城麻将辅助透视... 截至目前辅助!禾城麻将辅助透视挂,panda真的是有外挂,果然竟然有挂1、下载好禾城麻将脚本下载之后...
技术分享开挂!天天监利麻将辅助... 技术分享开挂!天天监利麻将辅助透视挂,豆豆棋牌真的是有外挂,果然讲解有挂1、点击下载安装,天天监利麻...
盘点一款透视挂!禾城麻将辅助透... 盘点一款透视挂!禾城麻将辅助透视挂,星乐麻将是真的有外挂,其实有挂细节1、下载好禾城麻将脚本下载之后...
玩家必看科普开挂!西兵互娱辅助... 玩家必看科普开挂!西兵互娱辅助透视挂,天星是有外挂,一直有人有挂1)西兵互娱免费钻石:进一步探索西兵...
如何分辨真伪开挂!新葡京辅助透... 如何分辨真伪开挂!新葡京辅助透视挂,海商游戏是有外挂,竟然确实有挂所有人都在同一条线上,像星星一样排...
信息共享开挂!涡阳茶馆辅助透视... 信息共享开挂!涡阳茶馆辅助透视挂,情怀河北麻将存在有外挂,果然有挂技术1、涡阳茶馆有没有辅助教程、涡...