C++ 处理大量

C++ 处理大量,c++,bignum,C++,Bignum,这是欧拉项目的网站 我不是在寻找解决方案,但我可能猜你会知道我的方法是什么。现在我的问题是,如何处理超过无符号整数的数字 有数学方法吗?如果有,我在哪里可以读到 long long 在GCC中 及 在VC中您是否尝试过无符号long-long或更好的方法/特别是uint64\u t 如果要处理大于[264-1][64位整数,无符号]范围的数字,则应查看bignum: 600851475143是问题给出的数字,264-1等于18446744073709551615。它绝对足够大。使用 long

这是欧拉项目的网站

我不是在寻找解决方案,但我可能猜你会知道我的方法是什么。现在我的问题是,如何处理超过无符号整数的数字

有数学方法吗?如果有,我在哪里可以读到

long long
在GCC中


在VC中

您是否尝试过
无符号long-long
或更好的方法/特别是
uint64\u t

如果要处理大于[264-1][64位整数,无符号]范围的数字,则应查看bignum:

600851475143是问题给出的数字,264-1等于18446744073709551615。它绝对足够大。

使用

long long

GCC和较新版本的Visual Studio(我相信是2008及更高版本)都支持这一点。

处理问题的最简单方法可能是使用Python。Python版本>2.5支持内置的长精度算术运算。精度仅取决于您的计算机内存。你可以从这里找到更多关于它的信息

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

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

  • 从2开始,尽可能多次地将其划分为目标,并留下零余数
  • 取下一个素数(3)并将其分成步骤1中的目标
  • 写下你找到的每一个因素并重复,直到你用完剩余的部分
  • 根据请求添加了算法伪代码: 其中,对
    p.next()
    的连续调用将生成素数序列中的下一个值{2,3,5,7,11,…}
    该伪代码与实际工作的Python代码的任何相似之处纯粹是巧合。我可能不应该提及
    primes.generator()
    的定义短了一行(但一行有50个字符长)。我最初编写这个“代码”是因为GNU
    factor
    程序不接受log2(n)>=40的输入。

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

    600851475143的最大素数因子小于10000。正如下面提到的,python非常适合这个任务,我只使用了44毫秒来分解目标。我没有在这个问题上做害羞的事,只是尝试不给一个扰流板。虽然我没有安装Python编译器,但是我想我会让C++代码运行直到程序完成……HaaGouTug你再试一次,KLW,这个时候做对了:- 64位比你需要的要多。我没有赶上步骤(我的英语很烂)。你能给我看一些计算实例吗?按要求添加。你拿到你的因子了吗?
    long long
    
    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