【问题标题】:Prime Factorization of numbers of form x^a + b where x is primex^a + b 形式的数的素数分解,其中 x 是素数
【发布时间】:2017-11-03 21:15:46
【问题描述】:

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

我得到一个输入 a[0]

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

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

A[p[0]] = c1, A[p[1]] = c2.... as p[i]

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

所以这非常有效,而且速度也足够快。现在我正在考虑优化空间并以时间效率的降低来弥补。

所以如果我可以将任何数字 P 表示为 x^a + b 其中 x 是素数。我可以分解它吗? P 显然不适合内存,但是 2

【问题讨论】:

  • 如果你的目标数是许多已知 a[i] 相乘的结果,你不需要发明任何其他形式。只需将每个 a[i] 分解并通过添加它们来计算素数幂(指数),就像您所做的那样(为什么要更改当前方法?)。您可以使用更紧凑的 A(素数幂)数组 - 甚至只有 2 的素数幂,因此您可以将每个

标签: algorithm dynamic-programming primes prime-factoring


【解决方案1】:

我不认为将数字表示为 xa + b 与素数 x 使其任何更容易考虑。

如今,分解百位数字并不是那么难。一台具有大量内核并运行良好二次筛的优质个人计算机可以在大约一天内分解大多数百位数,尽管您应该知道百位数大约是台式计算机合理分解的极限。查看 Jason Papadopoulos 的程序 msieve,了解最先进的分解程序。

【讨论】:

    【解决方案2】:

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

    然后你需要使用一些 arbitrary precision arithmetic(又名 bignums 或 bigints)库。我推荐GMPlib,但他们是other ones

    另见this answer

    【讨论】:

    • 由于数字是任意的,我不认为有很多简化。而且我宁愿不使用那些 bigint 库,而是尝试在尽可能低的级别上解决这个问题。因为我很确定没有必要存储整个产品。
    • 为什么不想使用 bigint 库?你不会比他们做得更好,而且你会做得更糟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2022-04-11
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多