来自Project Euler网站的Problem 3
解决后我没有出去,但我猜你会知道我的方法是什么。至于我现在的问题,如何处理超过unsigned int的数字?
是否有这样的数学方法,如果有,我在哪里可以阅读它?
答案 0 :(得分:5)
您是否尝试过unsigned long long
或更好/特别uint64_t
?
如果你想使用大于uint64_t
[2 64 -1] [64位整数,无符号]范围的数字,那么你应该研究bignum:{{ 3}}
600,851,475,143是问题给出的数字,2 64 -1等于18,446,744,073,709,551,615。这绝对够大。
答案 1 :(得分:4)
最近教过一个孩子我知道素数分解,如果你有一个素数列表,这个算法是微不足道的。
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
程序不接受log 2 ( n )> = 40的输入。
答案 2 :(得分:0)
使用
long long
在GCC
和
__int64
VC中的
答案 3 :(得分:0)
使用
long long
GCC和较新版本的Visual Studio(2008年及以后,我相信)都支持此功能。
答案 4 :(得分:0)
处理问题的最简单方法可能就是使用Python。 Python版本> 2.5支持内置的长精度算术运算。精度仅取决于您的计算机内存。您可以从link找到有关它的更多信息。
答案 5 :(得分:0)
long long
会针对该问题执行此操作。对于超过long long
的其他Project Euler问题,我可能会使用libgmp(特别是其C++ wrapper classes)。
答案 6 :(得分:0)
在Windows中,如果编译器不支持64位整数,则可以使用LARGE_INTEGER和ULARGE_INTEGER。