2012-01-05 1 views
3

Можно создать дубликат:
Enumerable.Range implementationПродлить Enumerable.Range

Я столкнулся с проблемой, где мне нужно добавить очень длинное значение (Int64) в списке Значение 600851475143 , я хочу создать List<Int64>, который содержит все int до этого значения, но Enumerable.Range имеет ограничение, которое в параметре count принимает только значения int, так как я далек от этого значения, я решил прокрутить список и все эти значения, bu t мои системные суки заканчиваются из памяти, что мне делать?

List<int64> lst = new List<int64>(); 

for (Int64 i = 3; i < 600851475143; i=i+2) 
{ 
    lst.Add(i); 
} 

Благодаря

+5

Вы должны объяснить, что вы на самом деле пытаетесь сделать, потому что вам не нужен массив из 5 тысяч бибонов в 600B! – Gabe

+1

Это действительно хорошая идея? Вы понимаете, что этот список будет занимать [4,37 терабайт] (https://www.google.com/search?hl=ru&q=600851475143%20\*%2064%20bit) памяти? – Kobi

+1

Имеет ли ваша система 600,851,475,143 x 8 байтов = Я считаю, что ~ 6 терабайт ОЗУ? Если нет, то почему вы не ожидаете, что это заполнит вашу память? –

ответ

0

Как отмечалось в комментариях, такой большой массив требует огромного количества памяти. Лучшим вариантом было бы, например, создать себе перечислитель, чтобы перебрать диапазон. Начните смотреть эту страницу, как: http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx :-)

+0

Да, это звучит как блестящая идея, я удалю все те значения, которые делятся на мои предыдущие простые числа, –