![]() |
|
![]() ![]() ![]() |
|
Mura-vey |
|
|||
Unregistered |
program Ishem_prostie_chisla_v_sotne;
uses crt; var a,b : array [1..100] of byte; p : byte; i,n,z : byte; label l,l2; begin ClrScr; a[1]:=3; b[1]:=3; i:=3; n:=0; l: p:=0; for z := 1 to n do begin b[z]:=b[z]-1; if b[z] = 0 then begin b[z]:=a[z]; p := 1; {goto l2;} end; end; if p<>1 then begin n:=n+1; a[n]:=i; b[n]:=i; write(a[n],' '); end; l2: i:=i + 2; {write(i,' ');} if i<=100 then goto l; {for i := 1 to 24 do begin write(a[i],' '); end;} write(n); end. Я долго коптил, и нашёл закономерность "размножения" простых чисел. (кто не верит пусть компилит!!!!) Я прошу помощи перевода етого кода на асм, при этом надо сделать возможность бесконечного увеличения массива. заранее сенкс |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
И чем конкретно этот метод новый?
|
|||
|
||||
Kefir |
|
|||
Unregistered |
Я вообще особо не рублю на Дельфи/Паскале, но... вообще на кой чёрт тебе искать эти числа? ведь можно просто брать число, проверять простое оно или нет, потом, если оно простое кидать его в файл или куда надо. на С++ что то в роде:
int num_to_check = 1000; for(int a = 0; a<num_to_check; a++) if(Prostoje4islo(a)==TRUE) printf("%i\n", a); Ф-ция Prostoje4islo проверяет простое ли число и, если да, то printf выводит это число на экран. Не верю, что на Паскали/Дельфи так нельзя сделать. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
2 Kefir - можно конечно, но проблема с простыми числами остаётся весьма острой, код автора тоже не поможет. Например видоизменим задачу - надо найти все простые числа в интервале от 10^20 до 10^22... Желательно за разумный интервал времени...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Dapo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
"Я долго коптил, и нашёл закономерность "размножения" простых чисел. "
Смелое утверждение :-). Если ты действительно сформулировал закон распределения простых чисел, тогда тебе нужно премию, как минимум, Филдса выдать. Кстати, кажется на Vingrade в каком-то разделе форума кто-то статью выдал, что какие-то ученые составили алгоритм получения простого числа, но чего-то я больше нигде подобной информации не читал. Для тех кто не в курсе (мало ли как бывает) простые числа - число которые деляться только на 1 и на себя (1,2,3,5,7,11,13,17 и т.д. (только вот как так? :-) ) ). |
|||
|
||||
Kefir |
|
|||
Unregistered |
2 Vit:
Это примерно 99 в 20й итераций... нда... хорошего времени не получается, но быстродействие компьютеров постоянно растёт, так что очень возможно, что вскоре и такой способ подойдёт. Вообще я не имел в виду таких астрономических чисел, просто при довольно нечасто надо находить все простые в этом интервале. 2 Dapo: Может ты это имел в виду: http://www.cse.iitk.ac.in/primality.pdf ? Это алгоритм дающий 100% уверенность в простоте числа (или же в том что оно не простое). |
|||
|
||||
maxim1000 |
|
|||
Unregistered |
Дело в том, что над этой проблемой "покоптили" еще в древности. В результате появился метод с названием "решето Эратосфена", который довольно часто изучается в школе...
если интересно - сходите, например, на www.nature.ru и наберите в поиске "решето Эратосфена" |
|||
|
||||
Kefir |
|
|||
Unregistered |
2 maxim1000:
Решето - это конечно хорошо, но и ты тоже не поленись, зайди по ссылке в моём предидущем мсг. Тоже довольно интересно. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Тема перемещена в раздел алгоритмов
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Paradox |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
А как же Кнут с его алгоритмами.....
-------------------- --- |
|||
|
||||
BlackWolf |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 2.4.2003 Репутация: нет Всего: нет |
Поиск простых чисел практически нужен например в криптоанализе системы шифрования с открытым ключом (например RSA). По крайней мере очень сильно убыстрит его.
|
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Ну вот, народ, ловите. Кто тут говорил, что статью хотел:
http://www.cse.iitk.ac.in/news/primality.pdf -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
df_3 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 19.5.2003 Репутация: нет Всего: 1 |
Сделай exe и дизасемблируй его ))) Вот тебе и код в АСМ
-------------------- ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ! |
|||
|
||||
df_3 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 19.5.2003 Репутация: нет Всего: 1 |
а так нормально! но лучше в динамической памяти Так как на большие массивы места не хватит)
-------------------- ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ! |
|||
|
||||
Гость_Victor |
|
|||
Unregistered |
Выведена формула получения простых чисел
http://www.laplas.narod.ru/moiform.htm пункт №4 где k целое число от 1 до бесконечности. Выражение в скобках ограниченных снизу обозначает целую часть дроби k/6, либо само значение этой дроби если k кратно 6, ну а функция n=[(k-1)mod(6)] и n=[(k)mod(6)] вам я надеюсь знакома - сравнимость чисел n и k-1, k по модулю 6. Эта формула даёт все простые числа по порядку начиная с 5. Так же по этой формуле получаются составные числа. Общая доля отсева равна 11/15=0.73333(3). |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Или посмотритет тут: http://forum.vingrad.ru/index.php?showtopic=30076 -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Y-Vladimir |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
Может я не вьехал во что-то, но вот фразу:
я не совсем понял... А чем эта формула отличается по смыслу от известной 2^n - 1, там вроде тоже простые получаются числа и составные иногда проскакивают...
Есть формула асимптотического распределения простых чисел: p(x) = x/ln x показывающая, сколько простых числе содержится на интервале 1..x. |
||||
|
|||||
LuckLess |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
непойму , какой смысл в формуле , если можно легко сделать общую долю отсева 0.5 проверяя только нечетные числа.. |
|||
|
||||
III.nfo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 18.10.2004 Репутация: 2 Всего: 2 |
Для программной проверки на простоту:
// language C# int IsProstoe = ...; // Объявляется переменная с числом. // Проверяется делимость на два. % - деление по модулю. if ((IsProstoe % 2) == 0) { MessageBox.Show ("Не простое!"); } for (i = 3; i != (IsProstoe / 2); i+2) { if ((IsProstoe % i) == 0) { MessageBox.Show ("Не простое!"); } } Суть действия: Сначала для быстроты исполнения проверяется на 2. -50% случайных чисел. Затем идёт перебор для нечётных чисел, больших еденицы и меньших половины числа. По-моему, хоть это и не самый, возможно, быстрый код, но он надёжен и прост в реализации, а затем будущим программерам в него будет легко въехать (начиная от таких, как я, 10-классников). Для поиска вводится цикл, в который это помещается. int MaxProstoe = ...; for (int IsProstoe = 1; IsProstoe != MaxProstoe) {...} Это сообщение отредактировал(а) III.nfo - 19.10.2004, 20:42 |
|||
|
||||
Baib |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 15.9.2004 Репутация: нет Всего: нет |
Во-первых, 1 - не простое...
Люди не в курсе где можно найти Кнута в электронном виде? А то вы тут его вспоминали... |
|||
|
||||
EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
У меня книжка на винте валяется по криптоанализу. Там вроде метод есть, с помощью которого можно найти простое число нужного порядка. Только там много слов непонятных и не разобрался как это делается.
А по Эратосфену я сам писал. Нашёл все в пределах 80 000 000 000. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
У меня даже прога валяется где-то (и работает в пределах 20 минут на 400 МГц). Если интересно...
-------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
Guest |
|
|||
Unregistered |
![]() ![]() ![]() ![]() ![]() |
|||
|
||||
Гость_Sanek |
|
|||
Unregistered |
Помоему этот попроще будет))... И ищет не только в сотне. И в 1000000 нейдёт... всё простые, только немного подождать придётся
![]() Program gen; uses crt; var n,k,t,sum,m: longint; begin clrscr; textcolor (2); sum:=0; Read (m); for n:=1 to m do begin t:=1; k:=2; while (k<n-1) and (t<>0) do begin t:=n mod k; k:=k+1; end; if t=0 then write ('') else begin Write (' ',n); inc(sum); end; end; writeLn; writeLn (sum); readkey; end. |
|||
|
||||
0d5a |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.5.2007 Репутация: нет Всего: нет |
Кнута здесь посмотреть можно
http://www.poiskknig.ru/ Добавлено через 2 минуты и 16 секунд А можно так, хотя почти тоже самое Delphi:
|
|||
|
||||
Artemios |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 14.8.2006 Где: Саратов, Россия Репутация: 1 Всего: 50 |
Можно, и я свою лепту внесу
![]() язык Haskell. Потенциально бесконечная последовательность простых чисел, используется классическое определение простого числа:
Пример взят отсюда. Потенциально бесконечная последовательность простых чисел, используется решето Эратосфена:
пример мой. -------------------- fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ] |
||||
|
|||||
dimoid_12 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.6.2007 Репутация: нет Всего: нет |
sorry
|
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Еще есть полином Мятисевича (как раз тут и обсуждался) только ничего разумного по нему найти не могу. Кто найдет- дам плюсик )
-------------------- Всем добра ![]() |
|||
|
||||
Julius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.8.2007 Репутация: нет Всего: нет |
есть еще косвенные методы) сейчас к примеру иногда используется малая теорема ферма за исключением чисел кармайкла. Только для этого нужны компьютеры побольше
![]() Это сообщение отредактировал(а) Julius - 10.1.2010, 13:56 |
|||
|
||||
ProgBeat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.8.2007 Репутация: нет Всего: нет |
этот алгоритм ничем не отличается от самого тривиального алгоритма b[z] = (a[z]-((i-a[z])/2%a[z]))%a[z] // при проверке на равенство нулю b[z] = a[z]-((i-a[z])/2%a[z]) // после проверки (a[z]-((i-a[z])/2%a[z]))%a[z] = 0 <=> i-a[z]=0(mod 2*a[z]) <=> cуществует такое k (1+2*k - нечётное, чётные можно не проверять), при котором i=a[z]*(1+2*k) // % - остаток от деления если заменить if b[z] = 0 then begin на if i Mod a[z] = 0 then begin то алгоритм очевидно будет работать от определения простого числа... Это сообщение отредактировал(а) ProgBeat - 7.8.2007, 02:07 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |