【问题标题】:Extend Enumerable.Range [duplicate]扩展 Enumerable.Range [重复]
【发布时间】:2012-02-03 01:16:43
【问题描述】:

可能重复:
Enumerable.Range implementation

我遇到了一个问题,我需要将一个很长的值 (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


【解决方案1】:

正如 cmets 中所指出的,如此大的数组将需要大量内存。例如,更好的选择是为自己创建一个枚举器来循环遍历范围。开始查看此页面以了解如何:http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx :-)

【讨论】:

  • 是的,这听起来是个绝妙的主意,我将删除所有可以被我之前的素数整除的值,
猜你喜欢
  • 1970-01-01
  • 2013-06-07
  • 2012-11-16
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2019-07-12
  • 2015-05-29
相关资源
最近更新 更多