Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 22:57   #11
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
"Выпендрился"
Кто бы говорил, у самого код частично на ассемблере Впрочем ТС не уточнял, на каком языке ему надо, так что имеешь право

P.S. Кстати, что за ассемблер? Хотелось бы документацию почитать, разобраться, как процедура работает.
Все тривиальное просто

Последний раз редактировалось whatever; 12.05.2012 в 23:02.
whatever вне форума
Старый 12.05.2012, 23:05   #12
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Дальше за целой частью квадратного корня исследуемого числа бежать нет смыла, т.к. это точка симметрии делителей.Дальше за целой частью квадратного корня исследуемого числа бежать нет смыла, т.к. это точка симметрии делителей.
спс! возьму на заметку! +1
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума
Старый 12.05.2012, 23:13   #13
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение

P.S. Кстати, что за ассемблер? Хотелось бы документацию почитать, разобраться, как процедура работает.
Эээээ.. это асм вставки в Делфи.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума
Старый 12.05.2012, 23:16   #14
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ужасно неоптимальные алгоритмы.
Все простые числа в диапазоне принято искать решетом Эратосфена.
s-andriano вне форума
Старый 12.05.2012, 23:59   #15
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Ну вообще можно еще более оптимальнее сделать не гонять все от 1 до trunc(sqrt(j)). А гонять гонять только величины до этого найденных простых чисел с условием конца в trunc(<простое число>). но при это придется держать массив и к нему обращаться. Почему-то на прогоне до 100000 я особой скорости от этого не почуствовал (наверно виновно в этом обращение в память).

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Ужасно неоптимальные алгоритмы.
Все простые числа в диапазоне принято искать решетом Эратосфена.
виноват походу вы об этом как раз и сказали =)
Помог? Ну так нажми на весы!
SNUPY вне форума
Старый 13.05.2012, 02:05   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Все простые числа в диапазоне принято искать решетом Эратосфена.
формально - да.
Но решение "в лоб" тоже достаточно эффективное!
Да и диапазон от 0 до 255 не такой огромный, чтобы огород городить...

так, развлечения ради...

Код:
function isPrime(X: LongInt): boolean;
var i: integer;
Begin
     isPrime:=false;
     if x<2 then Exit;
     if not odd(x) and (x<>2) { проверяем на чётность  }
          then exit;
     i:=3;
     while i <= sqrt(x) do { проверяем только нечётные }
     begin
          if x mod i = 0 then Exit;
          inc(i,2);
     end;
     isPrime:=true;
End;


var
 i, Kol : LongInt;
 PrimeArr : array[1..10000] of Integer;

 {для подсчёта тиков}
 Ticks      : LongInt  absolute 0:$46c;
 OldTick    : LongInt;


begin
  OldTick := Ticks;
  Kol := 0;
  for i:=1 to 100000  do
      if isPrime(i) then begin
         inc(kol);
         PrimeArr[ kol ] := i;
      end;

  WriteLn('Матрица заполнена за ', Ticks - OldTick, ' тиков.');

  WriteLn('Всего найдено ',Kol,' простых чисел ');
  Readln
end.
на моём стареньком компьютере AMD 1.8 Ггц, под DOS в Windows XP, программа на турбопаскале обработала диапазон от 1 до 100000 за 3 тика (напоминаю, что в 1 секунде примерно 18.2 тиков таймера DOS) т.е.~ 0.1648 секунды... при этом найдено 9592 простых числа...

Последний раз редактировалось Serge_Bliznykov; 13.05.2012 в 02:08.
Serge_Bliznykov вне форума
Старый 13.05.2012, 11:14   #17
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
формально - да.
Но решение "в лоб" тоже достаточно эффективное!
Да и диапазон от 0 до 255 не такой огромный, чтобы огород городить...
...
на моём стареньком компьютере AMD 1.8 Ггц, под DOS в Windows XP, программа на турбопаскале обработала диапазон от 1 до 100000 за 3 тика (напоминаю, что в 1 секунде примерно 18.2 тиков таймера DOS) т.е.~ 0.1648 секунды... при этом найдено 9592 простых числа...
Оно может быть эффективным в одном единственном случае - когда диапазон ограничен единственным числом (максимум, единицами).
Но для указанного диапазона разницу на глаз, естественно, не заметишь.
Когда-то давно, еще во времена существования Фидо, сравнивали решето Эратосфена с подобным алгоритмом для 16-разрядных чисел (т.е. до 65535). "Решето" оказалось быстрее более чем в 4000 раз. Измерить время выполнения в "тиках", естественно, было невозможно, поэтому "решето" загонялось внутрь цикла в 10000 проходов (ну а процессоры тогда были порядка 100 МГц).

Если требуется найти простые числа в большем диапазоне (например, до 2^32), алгоритм IMHO должен быть следующим:
1. Находим простые числа в диапазоне до 2^16, проверяя на ВСЕ делители до sqrt(N).
2. При нахождении за пределами этого диапазона в качестве делителей берем числа, найденные на этапе 1.
s-andriano вне форума
Старый 13.05.2012, 12:11   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano
Когда-то давно, еще во времена существования Фидо, сравнивали решето Эратосфена с
я где-то намекнул, что решето хуже прямого перебора?! Вы меня неправильно поняли - я сказал, что тут и прямого перебора более чем за глаза достаточно!

Цитата:
Сообщение от s-andriano
Измерить время выполнения в "тиках", естественно, было невозможно, поэтому "решето" загонялось внутрь цикла в 10000 проходов
ну да, решетом данная (исходная) задача решится за 0.0000001 секунды, а прямым перебором - 0.0004 с (цифры АБСОЛЮТНО УСЛОВНО-АБСТРАКТНЫЕ). Согласен, для учебной задачи это недопустимо долго!

Цитата:
Если требуется найти простые числа в большем диапазоне (например, до 2^32), алгоритм IMHO должен быть следующим:
согласен.
А Вы уверены, что автору темы эта информация будет полезна?
Serge_Bliznykov вне форума
Старый 13.05.2012, 14:32   #19
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А Вы уверены, что автору темы эта информация будет полезна?
К сожалению, не уверен. Но искренне надеюсь на это.
s-andriano вне форума
Старый 13.05.2012, 15:26   #20
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
А Вы уверены, что автору темы эта информация будет полезна?
Автору - вряд ли Не сомневаюсь, что он воспользовался первым ответом и забыл про тему. А вот мне было любопытно посмотреть. Спасибо всем
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура giv93 Паскаль, Turbo Pascal, PascalABC.NET 5 10.12.2011 18:10
Процедура ЗЛОбнаЯ Помощь студентам 5 18.09.2010 18:12
Процедура lex1398 SQL, базы данных 3 02.09.2010 15:54
Процедура jester_1936 Помощь студентам 5 20.12.2009 17:45
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17