Стоит задача найти все простые числа в диапазоне 0 – N . Использовать не более 3-х потоков.
Вопрос : Зачем тут могут понадобиться потоки ?
Зарание спасибо за ответ .
Стоит задача найти все простые числа в диапазоне 0 – N . Использовать не более 3-х потоков.
Вопрос : Зачем тут могут понадобиться потоки ?
Зарание спасибо за ответ .
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
27 марта 2010 в 14:02
Точно. Умалчиваю.
27 марта 2010 в 9:05
Таки Леонид прав ) Огромноеспасибо !
27 марта 2010 в 0:04
это не магия. просто он выделяет место для ста мегабайт в сегменте данных, а мегабайт надеется запихать в стек. вы, кстати, наверняка умалчиваете о том, что в случае с массивом интов помещали объявление вне функции.
2 Алексей Самоквитов
где нужен? в инферно, например. вообще же – клон языка newsqueak.
27 марта 2010 в 0:00
Наверное, это магия =)
26 марта 2010 в 23:05
Честно сказать , тоже о лимбо первый раз услышал . Трудно оценить всю красоту кода , когда его не знаешь :/ Как бы то ни было , спасибо за ответ с примером ))
Для тех , кому интересны сами алгоритмы для поиска простых чисел впоследовательности : решето Эратосфена вычеркивает одни элементы несколько раз . Это можно оптимизировать маленько . Также можно использовать решето Аткина , которое является более новой версией решета Эратосфена .
Кстати , еще такое дело приключилось : При попытке создать булевский массив более 1 000 000 элементов программа с первой же строки валится и кричит "стэк переполнен" . Как молодой программист , сталкиваюсь с этим первый раз . Может , кто подскажет чего умного ?
ЗЫЕсли же выделить динамическую память под массив , то ошибки не возникает , но затраты памяти возрастают в на много и много .
26 марта 2010 в 23:05
Если в Delphi пишешь, то надо директиву {$MINSTACKSIZE достаточно большое число} вставить в начале программы. В других средах наверняка тоже есть подобные директивы – поройся в справке.
26 марта 2010 в 23:05
Оу , совсем забыл сказать , пишу на С++ . Самое смешное , что массив инта из 100 000 000 эл. при построении прошлого алгоритма без проблем создавал .
26 марта 2010 в 23:03
Леонид maxleo Максимов, вопрос не по теме: где нужен лимбо? В первый раз увидел это название.
26 марта 2010 в 22:02
как пример – решето Эратосфена на лимбо:
counter:=prog(c:chan of int)
{
i:=2;
for(;;)
c<-=i++;
};
filter:=prog(prime:int, listen,send:chan of int)
{
i:int;
for(;;)
if((i=<-listen)%prime)
send<-=i;
};
sieve:=prog() of chan of int
{
c:=mk(chan of int);
begin counter(c);
prime:=mk(chan of int);
begin prog(){
p:int;
newc:chan of int;
for(;;){
prime<-=p=<-c;
newc=mk();
begin filter(p, c, newc);
c=newc;
}
}();
become prime;
};
prime:=sieve();
выполняется так:
i:int;
for(i=0; i<10; i++) print(<-prime, " ");
2 3 5 7 11 13 17 19 23 29 31 37
и попробуйте сказать, что потоки не делают решето проще.
26 марта 2010 в 13:03
Спасибо , я как раз его и собирался использовать , но вот про потоки строчка меня смутила .
26 марта 2010 в 13:00
Я тож не знаю, причем тут потоки, но найти все простые числа удобнее всего с помощью решета Эратосфена.
26 марта 2010 в 12:01
Все просто у тебя есть отрезок. Числа ищутся по опр. алгоритму на опр. отрезка. Ты делишь заданный промежуток на количество нитей и получаешь отрезок на котором каждая нить будет работать, по идее должно быть быстрее