【发布时间】:2012-02-03 01:16:43
【问题描述】:
我遇到了一个问题,我需要将一个很长的值 (Int64) 添加到列表中,该值是 600851475143,我想创建一个 List<Int64>,其中包含该值之前的所有 int,但是 @ 987654326@ 有一个限制,即在 count 参数中,它只接受 int 值,因为我离那个值很远,我决定循环遍历列表和所有这些值,但是我的系统很快就会耗尽内存,我应该怎么办怎么办?
List<int64> lst = new List<int64>();
for (Int64 i = 3; i < 600851475143; i=i+2)
{
lst.Add(i);
}
谢谢
【问题讨论】:
-
你应该解释你真正想要做什么,因为你不可能真的需要一个 5TB 的 600B 个数字的数组!
-
这真的是个好主意吗?你知道这个列表会占用4.37 terabytes 的内存吗?
-
您的系统是否有 600,851,475,143 x 8 字节 = 我相信 ~6 TB 的 RAM?如果不是,那你为什么不指望这会填满你的记忆呢?
-
好的,我想做的是,得到这个数的最大素数,我的应用程序正在创建所有这些素数的另一个列表,为了得到我使用的算法的素数“埃拉托色尼的筛子”mathforum.org/dr.math/faq/faq.prime.num.html
-
对于一个筛子,您只需要 600,851,475,143 bits,如果不存储偶数,则只需要一半。当然,你最终还是需要 38GB 的内存,所以你需要选择不同的算法!
标签: c# loops enumerable