我正在尝试编写一个程序来查找梅森素数。使用 unsigned long long 类型,我能够确定第 9 个梅森素数的值,即 (2^61)-1。对于较大的值,我需要一种可以存储大于 2^64 的整数值的数据类型。
我应该能够使用这种数据类型的运算符,如*
, *=
,和。>
<
%
我正在尝试编写一个程序来查找梅森素数。使用 unsigned long long 类型,我能够确定第 9 个梅森素数的值,即 (2^61)-1。对于较大的值,我需要一种可以存储大于 2^64 的整数值的数据类型。
我应该能够使用这种数据类型的运算符,如*
, *=
,和。>
<
%
你不能用 C 原生类型做你想做的事,但是有一些库可以处理任意大的数字,比如 GNU 多精度算术库。
要存储大量数字,有很多选择,下面按偏好递减的顺序给出:
1)使用其他人在github上开发的第三方库,codeflex等为您提到的语言,即C。
2) 切换到其他语言,例如具有内置大数处理能力的 Python、支持 BigNum 的 Java 或 C++。
3) 开发自己的数据结构,可以是字符串(其中 100 个字符长度可以指 100 个十进制数字)及其自定义操作,如加法、减法、乘法等,就像 C++ 中的复数库是以这种方式开发的. 此选择可能意味着您的研究和教育目的。
所有这些人的基本意思是,64 位 CPU 将无法仅通过一条指令来添加这些巨大的数字,但您需要一种能够添加这些数字的算法。这样的算法必须将这 2 个数字分段处理。
他们列出的库将允许您这样做,一个很好的练习是自己开发一个(只是学习如何完成的算法/功能)。
数据类型大于 64 位没有标准方法。您应该检查系统的文档,其中一些定义了 128 位整数。但是,要真正拥有灵活大小的整数,您应该使用其他表示形式,例如使用数组。然后,由您来定义运算符=
、<
、>
等。
幸运的是,GMP等库允许您使用任意长度的整数。
使用双 :)
它会解决你的问题!