存储和打印大于2 ^ 64的整数值

时间:2013-03-24 17:09:10

标签: c types multiprecision

我正在尝试编写一个程序来查找mersenne素数。使用无符号长long类型,我能够确定第9个mersenne prime的值,即(2 ^ 61)-1。对于较大的值,我需要一种可以存储大于2 ^ 64的整数值的数据类型。请帮忙。 (我应该能够使用 =,>,<和%等运算符来使用此数据类型。)

6 个答案:

答案 0 :(得分:8)

你不能用C natives类型做你想做的事情,但有些库可以处理任意大的数字,比如the GNU Multiple Precision Arithmetic Library

答案 1 :(得分:6)

要存储大数字,有许多选择,下面按优先级降低的顺序给出:

1)使用github,codeflex等其他人开发的第三方库,用于您提到的语言,即C.

2)切换到其他语言,如Python,内置大量处理功能,Java,支持BigNum或C ++。

3)开发自己的数据结构,可以是字符串(其中100个字符长度可以指100个十进制数字)及其自定义操作,如加法,减法,乘法等,就像开发C ++中的复数库一样通过这种方式。这个选择可能是为了您的研究和教育目的。

答案 2 :(得分:4)

所有这些人基本上都在说64位CPU只能用一条指令添加那些巨大的数字,但你需要一个能够添加这些数字的算法。这样的算法必须将2个数字分成两部分。

他们列出的图书馆允许你这样做,一个很好的练习就是自己开发一个(只需算法/函数来学习它是如何完成的)。

答案 3 :(得分:3)

数据类型大于64位没有标准方法。您应该检查系统的文档,其中一些定义了128位整数。但是,要真正具有灵活的大小整数,您应该使用其他表示,例如使用数组。然后,您可以自定义运算符=<>等。

幸运的是,诸如GMP之类的库允许您使用任意长度的整数。

答案 4 :(得分:2)

答案 5 :(得分:-1)

使用双:)

它会解决你的问题!