singlepost

Простые числа и потоки . << На главную или назад  

Стоит задача найти все простые числа в диапазоне 0 – N . Использовать не более 3-х потоков.
Вопрос : Зачем тут могут понадобиться потоки ?

Зарание спасибо за ответ .

29 ответов в теме “Простые числа и потоки .”

  1. 12
    Саня Кудр ответил:

    Точно. Умалчиваю.

  2. 11
    Роман Волошин ответил:

    Таки Леонид прав ) Огромноеспасибо !

  3. 10
    Леонид Максимов ответил:

    это не магия. просто он выделяет место для ста мегабайт в сегменте данных, а мегабайт надеется запихать в стек. вы, кстати, наверняка умалчиваете о том, что в случае с массивом интов помещали объявление вне функции.

    2 Алексей Самоквитов
    где нужен? в инферно, например. вообще же – клон языка newsqueak.

  4. 9
    Саня Кудр ответил:

    Наверное, это магия =)

  5. 8
    Роман Волошин ответил:

    Честно сказать , тоже о лимбо первый раз услышал . Трудно оценить всю красоту кода , когда его не знаешь :/ Как бы то ни было , спасибо за ответ с примером ))

    Для тех , кому интересны сами алгоритмы для поиска простых чисел впоследовательности : решето Эратосфена вычеркивает одни элементы несколько раз . Это можно оптимизировать маленько . Также можно использовать решето Аткина , которое является более новой версией решета Эратосфена .

    Кстати , еще такое дело приключилось : При попытке создать булевский массив более 1 000 000 элементов программа с первой же строки валится и кричит "стэк переполнен" . Как молодой программист , сталкиваюсь с этим первый раз . Может , кто подскажет чего умного ?

    ЗЫЕсли же выделить динамическую память под массив , то ошибки не возникает , но затраты памяти возрастают в на много и много .

  6. 7
    Саня Кудр ответил:

    Если в Delphi пишешь, то надо директиву {$MINSTACKSIZE достаточно большое число} вставить в начале программы. В других средах наверняка тоже есть подобные директивы – поройся в справке.

  7. 6
    Роман Волошин ответил:

    Оу , совсем забыл сказать , пишу на С++ . Самое смешное , что массив инта из 100 000 000 эл. при построении прошлого алгоритма без проблем создавал .

  8. 5
    Алексей Самоквитов ответил:

    Леонид maxleo Максимов, вопрос не по теме: где нужен лимбо? В первый раз увидел это название.

  9. 4
    Леонид Максимов ответил:

    как пример – решето Эратосфена на лимбо:

    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

    и попробуйте сказать, что потоки не делают решето проще. ;)

  10. 3
    Роман Волошин ответил:

    Спасибо , я как раз его и собирался использовать , но вот про потоки строчка меня смутила .

  11. 2
    Саня Кудр ответил:

    Я тож не знаю, причем тут потоки, но найти все простые числа удобнее всего с помощью решета Эратосфена.

  12. 1
    Константин Конашенков ответил:

    Все просто у тебя есть отрезок. Числа ищутся по опр. алгоритму на опр. отрезка. Ты делишь заданный промежуток на количество нитей и получаешь отрезок на котором каждая нить будет работать, по идее должно быть быстрее

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.