Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оцените код  для нахождения простых чисел, новый метод!!!!!!!!!!!! 
:(
    Опции темы
Mura-vey
Дата 4.1.2003, 06:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 5.1.2003, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

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



И чем конкретно этот метод новый?
PM WWW ICQ   Вверх
Kefir
Дата 10.1.2003, 07:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 10.1.2003, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
Dapo
Дата 10.1.2003, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



"Я долго коптил, и нашёл закономерность "размножения" простых чисел. "
Смелое утверждение :-). Если ты действительно сформулировал закон распределения простых чисел, тогда тебе нужно премию, как минимум, Филдса выдать. Кстати, кажется на Vingrade в каком-то разделе форума кто-то статью выдал, что какие-то ученые составили алгоритм получения простого числа, но чего-то я больше нигде подобной информации не читал. Для тех кто не в курсе (мало ли как бывает) простые числа - число которые деляться только на 1 и на себя (1,2,3,5,7,11,13,17 и т.д. (только вот как так? :-) ) ).
PM MAIL   Вверх
Kefir
Дата 10.1.2003, 18:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 Vit:
Это примерно 99 в 20й итераций... нда... хорошего времени не получается, но быстродействие компьютеров постоянно растёт, так что очень возможно, что вскоре и такой способ подойдёт.
Вообще я не имел в виду таких астрономических чисел, просто при довольно нечасто надо находить все простые в этом интервале.
2 Dapo:
Может ты это имел в виду:
http://www.cse.iitk.ac.in/primality.pdf
?
Это алгоритм дающий 100% уверенность в простоте числа (или же в том что оно не простое).
  Вверх
maxim1000
Дата 11.1.2003, 01:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дело в том, что над этой проблемой "покоптили" еще в древности. В результате появился метод с названием "решето Эратосфена", который довольно часто изучается в школе...
если интересно - сходите, например, на www.nature.ru и наберите в поиске "решето Эратосфена"
  Вверх
Kefir
Дата 11.1.2003, 01:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 maxim1000:
Решето - это конечно хорошо, но и ты тоже не поленись, зайди по ссылке в моём предидущем мсг. Тоже довольно интересно.
  Вверх
Vit
Дата 11.1.2003, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
Paradox
Дата 27.2.2003, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А как же Кнут с его алгоритмами.....


--------------------
---
PM MAIL WWW   Вверх
BlackWolf
Дата 2.4.2003, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Поиск простых чисел практически нужен например в криптоанализе системы шифрования с открытым ключом (например RSA). По крайней мере очень сильно убыстрит его.
PM MAIL   Вверх
neutrino
Дата 10.4.2003, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

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



Ну вот, народ, ловите. Кто тут говорил, что статью хотел:
http://www.cse.iitk.ac.in/news/primality.pdf


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
df_3
Дата 27.5.2003, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделай exe и дизасемблируй его ))) Вот тебе и код в АСМ


--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
df_3
Дата 27.5.2003, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а так нормально! но лучше в динамической памяти Так как на большие массивы места не хватит)



--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
Гость_Victor
Дата 28.9.2004, 11:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 28.9.2004, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(maxim1000 @ 11.1.2003, 00:05)
если интересно - сходите, например, на www.nature.ru и наберите в поиске "решето Эратосфена"

Или посмотритет тут:
http://forum.vingrad.ru/index.php?showtopic=30076


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Y-Vladimir
Дата 28.9.2004, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может я не вьехал во что-то, но вот фразу:
Цитата
Эта формула даёт все простые числа по порядку начиная с 5. Так же по этой формуле получаются составные числа. Общая доля отсева равна 11/15=0.73333(3).

я не совсем понял... А чем эта формула отличается по смыслу от известной 2^n - 1, там вроде тоже простые получаются числа и составные иногда проскакивают...

Цитата(Dapo @ 10.1.2003, 17:21)
"Я долго коптил, и нашёл закономерность "размножения" простых чисел. "

Есть формула асимптотического распределения простых чисел: p(x) = x/ln x
показывающая, сколько простых числе содержится на интервале 1..x.




--------------------
PM MAIL WWW   Вверх
LuckLess
Дата 29.9.2004, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Общая доля отсева равна 11/15=0.73333(3).


непойму , какой смысл в формуле , если можно легко сделать общую долю отсева 0.5 проверяя только нечетные числа..
PM MAIL   Вверх
III.nfo
Дата 19.10.2004, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL WWW   Вверх
Baib
Дата 23.10.2004, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во-первых, 1 - не простое...
Люди не в курсе где можно найти Кнута в электронном виде? А то вы тут его вспоминали...

PM WWW   Вверх
EKoshelev
Дата 16.11.2004, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня книжка на винте валяется по криптоанализу. Там вроде метод есть, с помощью которого можно найти простое число нужного порядка. Только там много слов непонятных и не разобрался как это делается.

А по Эратосфену я сам писал. Нашёл все в пределах 80 000 000 000.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
EKoshelev
Дата 23.11.2004, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня даже прога валяется где-то (и работает в пределах 20 минут на 400 МГц). Если интересно...


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Guest
Дата 23.11.2004, 10:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile smile smile smile smile
  Вверх
Гость_Sanek
Дата 14.4.2005, 16:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помоему этот попроще будет))... И ищет не только в сотне. И в 1000000 нейдёт... всё простые, только немного подождать придётся smile. Зацените.
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
Дата 30.5.2007, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кнута здесь посмотреть  можно

http://www.poiskknig.ru/

Добавлено через 2 минуты и 16 секунд
А можно так, хотя почти тоже самое
Delphi:

Код


program Project21;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes;

var
 a:array [1..1000000] of integer;
 inx,i,j,n:integer;
 l:TStringList;
begin
  readln;
  n:=1000000;             
  //n:=1000;
  inx:=0;
  for i:=2 to n do
  begin
    j:=1;
    while (j<=inx) and ((i mod a[j])<>0) do
      Inc(j);
    if (j>inx) then
    begin
      Inc(inx);
      a[inx]:=i;
      //writeln(i);
    end;
  end;
  l:=TStringList.Create;
  for i:=1 to inx do
    l.Add(inttostr(a[i]));
  l.SaveToFile('e:\temp\easy_num.txt');
  l.Free;
  writeln(inx);
  readln;
end.


PM MAIL   Вверх
Artemios
Дата 30.5.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно, и я свою лепту внесу  smile  
язык Haskell.
Потенциально бесконечная последовательность простых чисел, используется классическое определение простого числа:
Код

divisors n = [x | x <- [1..(n - 1)], rem n x == 0]

primes = [n | n <- [1..], isPrime n]
         where isPrime x = (divisors x == [1])

Пример взят отсюда.

Потенциально бесконечная последовательность простых чисел, используется решето Эратосфена:
Код

notdiv [] p = True
notdiv (x:xs) p = (rem p x /= 0) && (notdiv xs p)

erat = 2:[fnext (take (n+1) erat) (erat!!n + 1) | n<-[0..] ]
    where fnext xs n = if notdiv xs n
        then n
        else fnext xs (n+1)

пример мой.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
dimoid_12
Дата 15.6.2007, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



sorry
PM MAIL   Вверх
SoWa
Дата 7.7.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Еще есть полином Мятисевича (как раз тут и обсуждался) только ничего разумного по нему найти не могу. Кто найдет- дам плюсик )


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Julius
Дата 6.8.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть еще косвенные методы) сейчас к примеру иногда используется малая теорема ферма за исключением чисел кармайкла. Только для этого нужны компьютеры побольше  smile 

Это сообщение отредактировал(а) Julius - 10.1.2010, 13:56
PM MAIL   Вверх
ProgBeat
Дата 7.8.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Mura-vey @ 4.1.2003,  06:24)
......
Я долго коптил, и нашёл закономерность "размножения" простых чисел. (кто не верит пусть компилит!!!!)
Я прошу помощи перевода етого кода на асм, при этом надо сделать возможность бесконечного увеличения массива. заранее сенкс

этот алгоритм ничем не отличается от самого тривиального алгоритма
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
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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