【问题标题】:how to find factors of very big number [closed]如何找到非常大的因数[关闭]
【发布时间】:2014-09-08 13:47:21
【问题描述】:

我需要找到非常大的因子,比如 (10^1000) 。即如果输入为 100,则输出应为 10 10,因为 (10*10=100)。如果 N

【问题讨论】:

标签: bignum factors


【解决方案1】:

1) 正如已经指出的,分解大数是很困难的。事实上,它是 RSA 公钥密码学的基础已经足够难了,或者换句话说,每次你在网上买东西时,你都在指望这样一个事实,即很难将 2^2048 的数字分解(给定 2^10 = 1024 大约是 10^3,2^2048 大约是 10^600)。虽然 RSA 专门使用两个大素数,而您的随机 N 可能有很多小数,这会有所帮助,但我不会指望能够很快将 10^1000 +/- 一些随机值分解。

2) 你绝对可以使用字符串重新实现大数库 [来源:我有一个同学在我们学会如何做大数数学之前就这样做了] 但它会非常缓慢,而且你基本上必须转换你的每次都将字符串返回整数;如果你想重新实现大数字,一个稍微不那么痛苦的方法是整数数组。你仍然需要做一些额外的步骤,但至少要进行基本的数学运算,这并不是特别困难。 (但它仍然不会像专门的大数库那样高效,后者可以做聪明的算法。例如,将 2 个大数相乘,直接的方法是让 A = P * 2^32 + Q (即 A 是64 位数字表示为 2 个 32 位数字的数组)和 B = R * 2^32 + S ... 直接的方法需要 4 次乘法加上一些加法加上一些处理进位)。随着大数的大小增加,有一些方法(参见例如http://en.wikipedia.org/wiki/Karatsuba_algorithm)来减少所需的乘法次数)

3)(与尝试分解相比,有一些算法可以更有效地分解数字,但目前的算法仍然无法帮助计算您在宇宙热寂之前询问的数字)

【讨论】:

    【解决方案2】:

    10^1000 正好有 1,002,001 个整数除数,稍加思考应该很容易找到它们。质因数分解是

    2 * 2 * 2 * ... * 5 * 5 * 5

    正好有 1,000 个二和正好 1,000 个五。

    【讨论】:

    • 这真是太好了。但我需要找到任何 N (N
    • 如果你想问一个不同的问题,问一个不同的问题。我回答了被问到的问题。
    • 对于大多数 N 这很难。太难了,这不是编程问题,而是数学问题。
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2013-05-30
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2010-09-17
    相关资源
    最近更新 更多