形式x ^ a + b的数字的素数因子化,其中x是素数

时间:2017-06-02 12:43:22

标签: algorithm dynamic-programming primes prime-factoring

我需要计算大数的素数因子分解,大数字的意思是10 ^ 100的范围。

我得到一个输入a [0]&lt; = 10 ^ 5(其主要因素我已经使用筛子和其他优化计算过)。之后,我得到[1],[2],[3]的一系列输入,全部在范围2 <= a [i] <= 10 ^ 5。我需要计算产品并获得新产品的因素。我有以下数学

设X为内存中的数据,X可表示为:

X =(p [0] ^ c1)(p [1] ^ c2)(p [2] ^ c [3])....其中p [i]是其主要原因。 所以我把它保存为,

[p [0]] = c1,A [p [1]] = c2 ....如p [i] <= 100000这似乎运作良好。

当新号码到来时,我只需在A中添加新号码素数的幂。

所以这个效果非常好而且足够快。现在我正在考虑优化空间并通过降低时间效率进行补偿。

所以如果我可以将任意数字P表示为x ^ a + b,其中x是素数。我能把它分解吗? P显然不适合存储器但是2 <= x,a,b <= 100000?或者是否有任何其他方法可以节省我的空间?我可以使用比上述算法更慢的算法。

2 个答案:

答案 0 :(得分:2)

我不认为使用素数 x 将数字表示为 x a + b 更容易因素。

如今,百位数字的保理并不是那么难。一台好的个人计算机有很多内核运行良好的二次筛,可以在大约一天内计算出大多数数字,但你应该知道百位数的数字大约是在台式计算机的合理范围内。查看Jason Papadopoulos的计划msieve,了解最前沿的分解计划。

答案 1 :(得分:0)

首先,你最好在纸上做一些数学计算(或许可以进行一些简化;我不知道......)。

然后你需要使用一些arbitrary precision arithmetic(a.k.a.bignums或bigints)库。我建议GMPlib,但它们是other ones

另见this answer