storage - 无限(或非常高)长度的整数存储

标签 storage integer

作为一个业余项目,我正在研究一些自制的素数生成问题,尝试编写一些不同的实现作为自学 C 和 C++ 的方法。当然,生成低素数的最快方法是已经拥有它们,所以我想着手建立一个硬盘素数列表数据文件。我想编写生成素数的所有代码,但我对使用已经制作的存储方法没有任何疑虑。我对实际编码的经验很少,但了解大部分理论。 (请注意,对于大部分内容,我将讨论数学整数,而不是 int 变量)

所以我有一些问题想问各位专家:

1) 最简单的方法就是在生成整数时对其进行二进制写入。然而,在我的脑海中,我想象一个列表,其中的项目由某种标志分隔,以便可以存储大于 32 位的整数(如果我达到这一点)。这显然效率低下,但数组 [4723, 12782, 8357] 的原始数据看起来像 4723F12782F8357,也就是说,数字以十进制存储,每个数字 16 位,并用 F 分隔。显然,ABCDE 数字可能性的数据将不会被使用,因此这不是一个非常有效的系统,但你明白我的意思了。随着数字变得越来越长,这也变得越来越有意义,因为在任何固定长度系统中,最小的条目必须与最大的条目一样大。我确信已经有一些用 C 或 C++ 编写的东西可以有效地完成此任务。

2) 另一种可能性是长度声明系统,在存储每个整数之前,固定长度(比方说 1 字节)数据 block 声明该整数的长度(以位为单位)。这显然与之前的选项具有类似的优点,并且还有不浪费数字可能性的额外好处。

有谁知道如何存储这种数据?是否有一种变量类型可以存储素数以避免遇到大小限制?更好的是,以易于检索的格式将简单的整数列表存储到硬盘的最有效方法是什么?

最佳答案

不要重新发明轮子。如果您正在处理大素数,您几乎肯定需要一个 BigNum 库,例如 GMP ( http://gmplib.org/ )。 GMP BigNum 具有序列化方法,因此您可以使用这些方法轻松地将它们写入磁盘并从磁盘读取它们,让您可以自由地思考算法。

关于storage - 无限(或非常高)长度的整数存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102532/

相关文章:

algorithm - 在几何圆顶上存储顶点

android - 如何获取内部存储目录如 "\flash"、"\emmc"

assembly - 在MIPS中将整数转换为 double

c - 如何将 0 到 25 之间的整数转换为对应的 ASCII 字符?

random - Erlang - 随机数生成器

javascript - 整数验证未按预期工作

php - 在哪里存储上传的文件(声音、图片和视频)

amazon-web-services - 一次性创建多个卷 aws cloudformation

PHP 在本地抓取和存储输出

.net - 如何在 .NET 中将 ASCII 值转换为字符