【问题标题】:handling large number处理大量
【发布时间】:2010-05-23 06:07:25
【问题描述】:

这是来自 Project Euler 网站的 Problem 3

我不是在寻求解决方案,但我可能猜你会知道我的方法是什么。现在我的问题是,我如何处理超过 unsigned int 的数字?

是否有对此的数学方法,如果有,我在哪里可以了解它?

【问题讨论】:

  • 600851475143 的最大素数小于 10000。正如下面有人提到的,python 非常适合这项任务,我只用了 44 毫秒来分解您的目标。我不是对这个因素感到害羞,只是尽量不剧透。
  • 我还没有安装python编译器,我想我会让c++代码一直运行,直到程序完成......哈哈

标签: c++ bignum


【解决方案1】:

您是否尝试过unsigned long long 或更好/特别是uint64_t

如果您想使用大于uint64_t [264-1] [64 位整数,无符号] 范围的数字,那么您应该查看 bignum:http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic

600,851,475,143 是问题给出的数字,264-1 等于 18,446,744,073,709,551,615。绝对够大。

【讨论】:

  • 建议你再试一次,@klw,这次做对了 :-) 64 位比你需要的多。
【解决方案2】:

我最近教了一个孩子,我知道素数分解,只要你有一个素数列表,这个算法就很简单了。

  1. 从 2 开始,尽可能多地将其除为目标,余数为零。
  2. 取下一个素数 (3) 并将其划分为目标,如步骤一所述
  3. 写下您找到的每个因素并重复,直到用完剩余部分。

根据请求添加了算法伪代码:

def factor(n):
    """returns a list of the prime factors of n"""
    factors = []
    p = primes.generator()
    while n > 1:
        x = p.next()
        while n % x == 0:
            n = n / x
            factors.append(x)
    return factors

连续调用p.next() 会产生一系列素数 {2, 3, 5, 7, 11, ...} 该伪代码与实际工作 Python 代码的任何相似之处纯属巧合。我可能不应该提到primes.generator() 的定义短了一行(但一行有50 个字符长)。我最初编写这个“代码”是因为 GNU factor 程序不接受 log2(n) >= 40 的输入。

【讨论】:

  • 我没有赶上台阶(我的英语很烂)。你能告诉我一些计算的例子吗?
  • 根据请求添加。你得到你的因素了吗?
【解决方案3】:

使用

long long

在 GCC 中

__int64

在 VC 中

【讨论】:

    【解决方案4】:

    使用

    long long
    

    GCC 和较新版本的 Visual Studio(我相信是 2008 及更高版本)都支持此功能。

    【讨论】:

      【解决方案5】:

      也许解决您的问题的最简单方法是使用 Python。 Python 版本 > 2.5 支持内置长精度算术运算。精度仅取决于您的计算机内存。您可以从此link 找到更多信息。

      【讨论】:

        【解决方案6】:

        long long 会解决这个问题。对于其他超过 long long 的 Project Euler 问题,我可能会使用 libgmp(特别是 C++ wrapper classes)。

        【讨论】:

          【解决方案7】:

          在 Windows 中,如果您的编译器不支持 64 位整数,您可以使用 LARGE_INTEGERULARGE_INTEGER

          【讨论】:

            猜你喜欢
            • 2021-04-08
            • 2012-05-14
            • 2011-05-16
            • 2014-04-23
            • 2013-01-31
            • 2017-02-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多