Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решето Эратосфена 
:(
    Опции темы
poc
Дата 21.4.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.4.2004

Репутация: нет
Всего: нет



Привет Всем!
Кто нибудь может написать код нахождения 10000 простых чисел?
Спасибо!
PM MAIL   Вверх
maxim1000
Дата 21.4.2004, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



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


--------------------
qqq
PM WWW   Вверх
Maverick
Дата 21.4.2004, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: нет
Всего: 10



Насколько, я помню.... Простое - это которое делится нацело только на себя и на 1, значит....


for cislo :=1 to 10 000 do begin
count := 0; //количество делителей нацело
for delit:= 1 to cislo do if int(cislo/delit)=cislo/delit then count:=count+1;
//есть и более умные способы проверить делимость нацело, но счас в голову не приходят...
if count<=2 then //действия по запоминанию этого числа, cislo заносится в массив, например....
end;

вот что-то такое....


--------------------
smile
PM ICQ GTalk   Вверх
Гость_Oxygen
Дата 23.4.2004, 16:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я чуть поправлю Maverick`a.

Вместо:
for delit:= 1 to cislo do if int(cislo/delit)=cislo/delit then count:=count+1;

Ставим:
for delit:= 1 to sqrt(cislo) do if int(cislo/delit)=cislo/delit then count:=count+1;

Такой алгоритм быстрее cool.gif


  Вверх
OxygenZ
Дата 23.4.2004, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.4.2004

Репутация: нет
Всего: нет



Чоссс:
Во как нужно -->

for delit:= 1 to round(sqrt(cislo)) do if int(cislo/delit)=cislo/delit then count:=count+1; cool.gif
PM MAIL   Вверх
Magister Y0da
Дата 12.1.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зелёненький
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 30.11.2004

Репутация: 2
Всего: 2



Конечно алгоритм верный (round(sqrt(cislo))), но зачем делать лишнюю работу???

Код

if cislo mod 2 <>0 then
begin
b:=true;
for delit:=2 to round(sqrt(cislo)) do
if int(cislo/delit)=cislo/delit then
begin
b:=false;
break;
end;
if b then writeln(cislo);
end;
 smile 
--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.