组合理论的一个问题

A problem of taking combination for set theory

本文关键字:一个 问题 理论 组合      更新时间:2023-10-16

给定一个尺寸为n的数组a。数组a的子集的值定义为该子集中所有数字的乘积。我们必须返回所有可能的非空数亚集的值的乘积a%(10^9 7(。

例如。数组a {3,5}

`值{3} = 3, 值{5} = 5, 值{3,5} = 5*3 = 15

答案= 3*5*15%(10^9 7(。

有人可以解释问题背后的数学。我正在考虑通过组合解决它来有效地解决它。

我尝试使用蛮力给出了正确的答案,但是它太慢了。下一个方法是使用组合。现在,我认为,如果我们采用所有集合并乘以这些集合中的所有数字,那么我们将获得正确的答案。因此,我必须找出计算答案的数字有多少次。在示例5和3中,两次都到了2次。如果我们仔细观察,则每个数字的次数都相同。

您要朝正确的方向前进。

x为给定数组A的元素。在我们的最终答案中,x出现p次数,其中p等于包括xA子集的数量。

如何计算p?一旦我们决定将x包括在我们的子集中,我们就有两个选择的N-1元素:将它们包括在set中或不包含。因此,我们得出结论p = 2^(N-1)

因此,A的每个元素在最终产品中完全出现2^(N-1)次。所有遗骸都是计算答案:(a1 * a2 * ... * an)^p。由于指数很大,因此您可以使用二进制指数进行快速计算。

正如Matt Timmermans在下面的评论中所建议的那样,我们可以在不实际计算p = 2^(N-1)的情况下获得答案。我们首先计算产品a1 * a2 * ... * an。然后,我们只是将此产品与n-1次保持平衡。

C 中的相应代码:

int func(vector<int> &a) {
    int n = a.size();
    int m = 1e9+7;
    if(n==0) return 0;
    if(n==1) return (m + a[0]%m)%m;
    long long ans = 1;
    //first calculate ans = (a1*a2*...*an)%m
    for(int x:a){
        //negative sign does not matter since we're squaring
        if(x<0) x *= -1;
        x %= m;
        ans *= x;
        ans %= m;
    }
    //now calculate ans = [ ans^(2^(n-1)) ]%m
    //we do this by squaring ans n-1 times
    for(int i=1; i<n; i++){
        ans = ans*ans;
        ans %= m;
    }
    return (int)ans;
}

让 a = {a,b,c}
A is = {{},{a},{b},{c},{a,b},{b,c},{c,a},{a,b,b,c,d}的所有可能子集}
这里每个元素的发生数量是4次。
因此,如果a = {a,b,c,d},则每个元素的出现数量为2^3。
因此,如果A的大小为N,则每个元件的出现数量将为2^(n-1(

因此,最终结果将为= a1^p*a2^ p a3^p ....*an^p
其中p为2^(n-1(

我们需要解决x^2^(n-1(%mod。

我们可以将x^2^(n-1(%mod写成x^(2^(n-1(%phi(mod((%mod。链接
因为mod是素数,然后phi(mod(= mod-1。

首先找到p = 2^(n-1(%(mod-1(。
然后为每个数字中的每个数字找到ai^p%mod,然后与最终结果相乘。

我阅读了以前的答案,我正在理解制作集的过程。因此,在这里,我试图将其放入尽可能简单的地方,以便他们可以将其应用于类似的问题。

让我成为数组A的元素A。在问题中给出的方法之后,我在最终答案中出现了p次数。

现在,我们如何制作不同的集合。我们仅使用一个包含一个元素的集合,然后集合包含两个组的组,然后包含3个元素组。现在,我们想知道,每次我们制作一组数字的集合说3个要素时,其中有多少个包含i?有n个元素,因此对于总是包含i的3个元素集的集合,组合为(n-1(c(3-1(,因为从n-1元素中我们可以选择3-1个元素。如果我们为每个组这样做,则p = [(n-1(c(x-1(],m从1到n。因此,p = 2^(n-1(。

对于每个元素i,p都一样。这样我们就得到了最终答案= a [0]^p *a [1]^p ...... a [n]^p