![]() |
1
1
Eratosthenes筛每个数字只需要一个比特,表示该数字是否被标记为非素数。 减少内存使用的一种方法是使用逐位数学表示每个表项中的多个位。当前的Lua实现内在地支持按位或,-等。根据底层实现,您应该能够表示每个表条目的32位或64位(数字标志)。 另一种选择是使用一个或多个很长的字符串,而不是表。您只需要一个线性数组,它实际上就是字符串。只要在每个位置都有一个带有“t”或“f”或“0”或“1”的长字符串。 警告:Lua中的字符串操作总是涉及到重复,这很快就会变成n或更糟的性能复杂性。你不希望整个大规模序列都有一个连续的字符串,但你可能会把它分解成1000个块,或者2的幂。这样可以将内存使用量减少到每个数字1字节,同时将开销降至最低。 在注意到其他地方提出的一点后,我意识到您的最大数字太大了,即使每个数字有一个位,您的内存需求也会达到 73 GB ,这是非常不切实际的。我建议按照小猪在回答中给出的建议,看看乔恩·索伦森(JonSorenson)的筛子版本,它适用于空间的各个部分,而不是整个东西。 我会留下我的建议,因为它可能对索伦森的筛子仍然有用,但是的,你有一个比你意识到的更大的问题。 |
![]() |
2
1
Lua使用双精度浮点表示数字。这是每个数字64位。 600851475143数字产生了近4.5TB的内存。 所以这不是Lua或其表的错。错误消息甚至说
您只是没有足够的RAM来分配这么多。 如果你仔细阅读维基百科的链接文章,你会发现以下部分:
|
|
John Whitham · 如何修复“尝试调用字符串值”错误 1 年前 |
![]() |
oreto · Roblox Lua脚本,如何使帧从左到右减小其大小? 2 年前 |
![]() |
Jexter Labo · 如何在Lua中从循环表中删除键值 2 年前 |
![]() |
Zack Lee · 在Lua中查找未使用的符号 6 年前 |
|
User101 · Roblox Studio-GUI的按键切换 6 年前 |
![]() |
Doudou · 当我的noob被杀死时,我的GUI如何显示? 6 年前 |
![]() |
eonmax · Lua在后台执行python脚本 6 年前 |