我正在寻找一种有效的方法来计算xor为零的整数分区数: F(n,c)=#{(x1,x2,...,xc)| x1 + x2 + ... + xc = n& x1 xor x2 xor ... xor xc = 0}
对于n和c的小值,可以很容易地运行嵌套循环来计算这些值。但是对于较大的值,它不易处理。 我想获得一个封闭的表格或至少一个允许动态编程的递归公式..
答案 0 :(得分:1)
除非你的问题的限制导致一个特别聪明且非常不明显的解决方案,否则我相信你提出了一个非常困难的问题,那就是研究数学的最新状态。
首先,计算整数的简单无限制分区(即,计算可区分的,与顺序无关的表示整数的方式的数量作为正整数的总和)是一个具有数百年历史的深度数学问题。
http://en.wikipedia.org/wiki/Partition_%28number_theory%29#Partition_function_formulas
你有一些额外的非正统约束---首先你只想要具有给定数量的术语的分区子集(这可能会使它更容易),然后,我认为,对二进制的XOR的约束这些术语的表示可能很难处理。
你有多大意愿?上面的参考文献表明p(1000)大约是2.44 * 10 ^ 31。
如果n很大,你是否也相信c会很小?这将大大简化事情。
要解决您的问题,您需要吸引专门研究该领域的研究数学家的兴趣。
www.aimath.org/news/partition /
您可以尝试使用“分区”作为关键字进行数学溢出。
我发现这个主题是关于分割成c(他们使用'k'作为这个部分)各个部分,这是你的第一个(更容易)约束。