gpt4 book ai didi

java - 如何求子集中元素的和

转载 作者:行者123 更新时间:2023-12-02 10:21:55 25 4
gpt4 key购买 nike

我想找到元素能被2整除或者元素之和能被2整除的子集的数量

我已经找到了给定数组的所有可能的子集

for(int i=1;i<=(Math.pow(2,n));i++) //Loop for all 2^n combinations
{
for(int j=0;j<n;j++)
{
if((i&(1<<j))>0) //This gives the subset of the array

输入:1 2 3输出:3 as {2},{1,3=4},{1,2,3=6}是能被2整除的子集或者其元素之和能被2整除的子集。

最佳答案

根据假设:

  • 输入为n(自然数)
  • 输出是“偶数子集”的计数(在大小为 n 的自然数序列中)

...(确切的)结果是:

sum(binomial(n - 1, k), k in [1 .. n - 1])

分别(=):

floor(sum(binomial(n, k), k in [1 .. n])/2)

分别(=):

(2^(n-1)) -1

<小时/>

O(log(n)) 算法:

public class Test {


public static long countSuperClever(int n) {
return pow(2L, (long) n - 1) - 1L;
}

// best thx to https://codingforspeed.com/using-faster-integer-power-in-java/
private static long pow(long a, long b) {
long re = 1L;
while (b > 0) {
if ((b & 1) == 1) {
re *= a;
}
b >>= 1;
a *= a;
}
return re;
}

public static void main(String[] args) {
for (int i = 3; i < 12; i++) {
System.out.println(countSuperClever(i));
}
}

}
<小时/>

另请参阅:https://math.stackexchange.com/a/1338830/20447

关于java - 如何求子集中元素的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com