1)Помогите с задачей. В принципе задача несложная, но у меня единственное не получается, если я нашёл первый элемент, то как мне сделать так, чтобы начать счет сначало и искать дальше? 2) подскажите простой алгоритм нахождения простых чисел?В приципе я знаю один, но он слишком сложный, я так и не понял до конца как он работает: for i:=1 to LIMIT do begin j:=2; lim:=round(sqrt(i)); while (i mod j <> 0) and (j <= lim) do inc( j ); if (j > lim) then write( i,' ' ); end;
Приветствую Вас, Семен! Зайдите на http://algolist.manual.ru/, там довольно много всяких алгоритмов. Я тоже не великий спец по алгоритмам, поэтому пользуюсь для понимания таким методом: - расписываю готовое решение на бумажке (экране компа) и решаю его сам, пошагово. Тогда все становится совершенно понятно. :) Ответ отправлен: 19.11.2004, 05:36 Отправитель: sir henry Отвечает ALex_zaw
Здравствуйте, Семен! Попробуйте каждый раз после просмотра массива передавать его в другой, а потом просматривать другой массив и передавать его в первый. А на счёт простых чисел посмотрите ответы на вопрос №542, там есть то что Вам нужно и очень в принципе понятно и просто. Ответ отправлен: 19.11.2004, 11:32 Отправитель: ALex_zaw Отвечает Tancho
Здравствуйте, Семен! Относно 1) А ты сам какой алгоритм предлагаеш?Не искай экспертов делать вся твою работу!Потрудись предложи свое решение и тогда если проблемов мы поможем!Экспертов нельзя делать вся твою работу, а только для консултирования и подсказки какие то более сложные проблемов!м 2) Фрагмент прогу, каторая ты предлагаеш реализует так называемый алгоритм решета Эротостена для нахождения все простые чисель меньше заданого!Чего здесь сложного, мне не известен алгоритм более компактный от этом!В приложении я дописал твой фрагмент до действующую прогу!
Приложение: Ответ отправлен: 19.11.2004, 12:03 Отправитель: Tancho Отвечает DSota
Здравствуйте, Семен! 1. Номер следующего элемента равен остатку целочисленного деления номера предыдущего элемента плюс один на размер массива. 2. Что делает алгоритм: для каждого числа от 1 до LIMIT смотрит: Если оно делиться на какое-то число от 2 до корня из него (больше чем корень просматривать бесполезно, это уже из математики), проверяется остаток, если остаток нулевой - то число считается непростым, выход из while. А если в диапазоне такого числа не нашлось, о стал больше lim, то число простое. Что можно: просто создать массив boolean элементов, и из вычеркивать из него каждый 2-й, 3-й и т.д. элемент, все что останеться и есть простые числа: var simpl:array[2..LIMIT]of boolean; for i:=2 to LIMIT do simpl[i]:=true; for i:=2 to LIMIT do begin j:=i*2; while j<=LIMIT do begin
simpl[j]:=false;{Вычеркиваем, делиться на i} j:=j+i; end; end; for i:=2 to LIMIT do begin if simpl[i] then write (i,' '); end;
Ответ отправлен: 18.11.2004, 19:45 Отправитель: DSota
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.