在过去的几周里,我一直致力于制定一个能够使主要螺旋尽可能高效的程序.我研究了多线程以提高程序的速度,现在我遇到了一个新问题.我的素数列表的长度为6400万和零,这个列表占用240MB的内存.因为我使用多处理(总共5个进程),我的脚本最多使用总共1.1GB的ram,如果达到这一点,则返回内存错误.
关于我如何存储素数的一些背景信息:质数存储在列表中,每次我找到素数时,我将值设置为1(例如:Primes [13] = 1(因为它是素数)和Primes [14] = 0).对我来说这似乎是最好的解决方案,因为列表不会占用大量内存
经过一些基本的数学计算后,我得出结论,我的素数列表中的每个零或一个占用4个字节(32位)的信息.这似乎是合乎逻辑的,但我想知道是否有办法将零和1存储为单个位,因此它不会占用太多内存.
提前感谢您的任何答案,
问候,伤害
最佳答案
如果每0或1取32位,则表示它的字符(可能是整数?)数组.您应该使用布尔类型(bool).最简单的方法是使用bitarray.其中一个实现: