我有一组使用以下公式生成的数字,其中整数0< x<一个。
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完全的(基于Subset-Sum问题的相似之处)。
但是从任何整数(x)开始都会给出相同的解决方案模式。
EG。 a = 649
{2,4> 16 ,256,636,169, 5 ,25,649, 576 ,137,... } = 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
我想知道这个额外的事实是否能让这个问题更快解决? 或者,如果有人以前遇到过这个问题或有任何建议吗?
答案 0 :(得分:3)
所以f(x) = g^(2^x) % a
,g=f(0)
。您可以使用欧拉定理找到一些f(x)
乘以一起得到1. Euler's theorem个状态g^Phi(a) % a = 1
(Phi(a)
= Euler's totient function =#of integers {{ 1}}是< a
的相对素数。因此,您只需要计算a
,然后将其分解为其位表示,并选择适当的Phi(a)
来设置加在一起的位以生成x
。
也许一个例子会更清楚。设Phi(a)
,然后a = 54
。然后是Phi(a) = 18
,所以18 = 2^4 + 2^1
mod f(4) * f(1) = g^(2^4+2^1) = g^18 = 1
。
所有这一切都很简单,但您需要计算a
。这一般很难(相当于因子Phi(a)
),但是,例如,如果你知道a
是素数,那就很容易了。
请注意,此解决方案不依赖于a
的值,除了g = f(0)
和g
是相对素数的事实(如果它们不是,那么就没有'任何解决方案)。
在你的情况下,a
,所以你将f(2),f(6)和f(9)相乘。
答案 1 :(得分:1)
子集产品问题也证明了NP完整,并且与此更加相似: http://www.wolframalpha.com/entities/famous_math_problems/subset_product_problem/oa/xp/7d/
子集和实际上可在伪多项式时间O(nC)中求解,其中C =总“权重”(例如649)。我不知道子集产品是否有类似的东西。