9

我正在尝试编写一个程序来查找梅森素数。使用 unsigned long long 类型,我能够确定第 9 个梅森素数的值,即 (2^61)-1。对于较大的值,我需要一种可以存储大于 2^64 的整数值的数据类型。

我应该能够使用这种数据类型的运算符,如*, *=,和。><%

4

6 回答 6

8

你不能用 C 原生类型做你想做的事,但是有一些库可以处理任意大的数字,比如 GNU 多精度算术库

于 2013-03-24T17:14:14.603 回答
6

要存储大量数字,有很多选择,下面按偏好递减的顺序给出:

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

2) 切换到其他语言,例如具有内置大数处理能力的 Python、支持 BigNum 的 Java 或 C++。

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

于 2013-03-24T17:18:34.667 回答
4

所有这些人的基本意思是,64 位 CPU 将无法仅通过一条指令来添加这些巨大的数字,但您需要一种能够添加这些数字的算法。这样的算法必须将这 2 个数字分段处理。

他们列出的库将允许您这样做,一个很好的练习是自己开发一个(只是学习如何完成的算法/功能)。

于 2013-03-24T17:22:48.043 回答
3

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

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

于 2013-03-24T17:15:23.420 回答
2

看看GNU MP Bignum 库

于 2013-03-24T17:14:06.690 回答
-1

使用双 :)

它会解决你的问题!

于 2021-04-28T07:05:46.513 回答