Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Вниз

Простые числа   Найти похожие ветки 

 
JediMaster   (2004-02-06 13:00) [0]

Подскажите алгоритм для поиска простых чисел, нужно найти числа от 0 до 15000, простой метод(искать делители) не пойдет.
За ранее спасибо :)


 
Sandman25   (2004-02-06 13:03) [1]

Вычеркиваете из списка кандидатов всех, которые делятся на 2. Потом те, которые делятся на минимальное из оставшихся (кроме него самого). И так пока не дойдете до конца.

PS. "Вычеркнуть четные" можно при занесении в массив, конечно.


 
MBo   (2004-02-06 13:04) [2]

Просто заноси найденные простые числа в список, и проверяй делимость только на них.


 
MV   (2004-02-06 13:12) [3]

Алгиритма нэт! Просто заноси найденные простые числа в список, и проверяй делимость только на них. И все!


 
Sandman25   (2004-02-06 13:21) [4]

const N = 15000;

for I := 2 to N do
A[I] := N;
Current := 2;
while (Current <= N) do
begin
if A[Current] <> 0 then
for J := 2 TO N div I do
A[J*Current] := 0;
Inc(Current);
end;

for I := 2 to N do
if A[I] <> 0 then
showmessage(inttostr(I));


 
Sandman25   (2004-02-06 13:24) [5]

А еще лучше так:
const N = 15000;

fillchar(@A[2], SizeOf(A[2])*(N-1), 1);
for Current := 2 to N do
begin
if A[Current] <> 0 then
for J := 2 TO N div I do
A[J*Current] := 0;
end;

for I := 2 to N do
if A[I] <> 0 then
showmessage(inttostr(I));


 
pasha_golub   (2004-02-06 13:25) [6]

Решето Эратосфена.

Реализайций море. Можно с массивом, но накладно с памятью, а можно с битовыми операциями. Дык, прикинем... 15000 / 8 = 1875 байт потребуется, для нынешних машин это пшык. Удачи.


 
Sandman25   (2004-02-06 13:27) [7]

Решето Эратосфена.

Точно. А то не мог вспомнить название :)


 
Serginio666   (2004-02-06 13:44) [8]

Function TNewInt32Hash.ProstoeChislo(v: Cardinal): Cardinal;
VAR i:Cardinal;
Find:Boolean;
Begin

Result:=v or 1;
Find:=true;

While true do
Begin
i:=3;

While i<Trunc(Sqrt(result)) do
Begin
If (result mod i)= 0 Then
Begin
Find:=false;
break
end
Else inc(i,2);
end;

If Find Then
exit
else
begin
Find:=true;
inc(result,2);
end;
end;

End;


 
Brahman   (2004-02-06 14:07) [9]

Проще и быть не может:)

for i:=0 to N-1 do A[i] := i;
num:=0;
for i := 2 to N-1 do begin
if A[i] <> 0 then inc(num);
j := i + i;
while j <= N-1 do begin
A[j] := 0;
j := j + i;
end;
end;


 
JediMaster   (2004-02-06 14:13) [10]

Нужно не от 0 до 15000, а первые 15000 чисел.
Всем спасибо за помощь :)


 
Serginio666   (2004-02-06 14:15) [11]

Brahman © (06.02.04 14:07) [9]
Ну ну и так до 1 ГБ ?????


 
Serginio666   (2004-02-06 15:07) [12]

http://www.rsdn.ru/Forum/Message.aspx?mid=48059&only=1


 
nikkie   (2004-02-06 15:18) [13]

>Нужно не от 0 до 15000, а первые 15000 чисел.
по формулам Чебышева можно оценить величину N-ого простого. после этого решето Эратосфена. например, как в [9] Brahman. только если вместо
j := i + i;
делать
j := i * i;
то быстрее получится.


 
Brahman   (2004-02-06 16:45) [14]

nikkie © (06.02.04 15:18) [13]

За одним маленьким исключением - верхний предел меньше или
надо переходить на BigInt



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
14-53719
fool
2004-01-29 13:56
2004.02.17
восстановить удаленный файл, фаиловая система NTFS


1-53597
DDS
2004-02-04 10:49
2004.02.17
Как работать с большим обьемом строк.


6-53682
Бэтман
2003-12-15 16:29
2004.02.17
Список компьютеров в локалке


8-53655
Jee
2003-07-30 15:05
2004.02.17
Тоновый набор


9-53348
Landgraph
2003-08-07 11:18
2004.02.17
Z координата...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский