Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оцените код  для нахождения простых чисел, новый метод!!!!!!!!!!!! 
:(
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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