Math 子集积的复杂性

Math 子集积的复杂性,math,complexity-theory,Math,Complexity Theory,我有一组使用以下公式生成的数字,整数为0

我有一组使用以下公式生成的数字,整数为0
f(x) = f(x-1)^2 % a
例如,从2开始,a=649

{2, 4, 16, 256, 636, 169, 5, 25, 649, 576, 137, ...}
我追求的是这些数字的一个子集,当它们相乘时等于1 mod N

我相信这个问题本身就是NP完全问题,它与子集和问题有相似之处

然而,从任何整数x开始给出相同的解决方案模式

a=649

{2,4,16,256,636,169,5,25649576137,}=16*5*576=1%649 {3, 9, 81, 71, 498, 86, 257, 500, 135, 53, 213, ...} = 81 * 257 * 53 = 1 % 649 {4,16,256,636,169,5,25,649,576,137,597,}=256*25*137=1%649

我想知道这个额外的事实是否能使这个问题更快地得到解决?
或者,如果有人以前遇到过这个问题,或者有什么建议?

子集积问题也被证明是NP完全问题,并且与此有更大的相似性:


子集和实际上在伪多项式时间内是可解的,OnC,其中C=总权重eg 649。我不知道子集积是否也可能出现类似的情况。

子集积问题也被证明是NP完全问题,并且与此更为相似:

子集和实际上在伪多项式时间内是可解的,OnC,其中C=总权重eg 649。我不知道在子集产品中是否可能出现类似的情况。

因此fx=g^2^x%a,其中g=f0。你可以使用欧拉定理找到一些fx,然后相乘得到1。表示g^Phia%a=1 Phia==相对于a的素数小于a的整数。因此,您只需要计算Phia,然后将其分解为其位表示形式,并选择适当的x来设置位,这些位相加形成Phia

也许一个例子会更清楚。假设a=54,那么Phia=18。那么18=2^4+2^1,那么f4*f1=g^2^4+2^1=g^18=1模a

所有这些都很简单,但您确实需要计算Phia。这在一般情况下相当于分解a是困难的,但如果你知道a是素数,这就很容易了

请注意,此解决方案不依赖于g=f0的值,除非g和a是相对素数,如果它们不是,则不存在任何解决方案

在您的例子中,Phi649=580=2^9+2^6+2^2,所以将f2、f6和f9相乘。

so fx=g^2^x%a,其中g=f0。你可以使用欧拉定理找到一些fx,然后相乘得到1。表示g^Phia%a=1 Phia==相对于a的素数小于a的整数。因此,您只需要计算Phia,然后将其分解为其位表示形式,并选择适当的x来设置位,这些位相加形成Phia

也许一个例子会更清楚。假设a=54,那么Phia=18。那么18=2^4+2^1,那么f4*f1=g^2^4+2^1=g^18=1模a

所有这些都很简单,但您确实需要计算Phia。这在一般情况下相当于分解a是困难的,但如果你知道a是素数,这就很容易了

请注意,此解决方案不依赖于g=f0的值,除非g和a是相对素数,如果它们不是,则不存在任何解决方案


在您的例子中,Phi649=580=2^9+2^6+2^2,因此将f2、f6和f9相乘。

非常感谢您的解释。非常感谢您的解释。