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

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

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

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

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

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

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

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

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

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

幸运的是, GMP等库允许您使用任意长度的整数。

看看GNU MP Bignum Library 。