Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2009 21:49:17

зёма
От:
Зарегистрирован: 2009-02-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

Всем привет :). Получил одно из заданий. написать тест рабина милера(на delphi). нашел уже готовый алгоритм написанный на python на wikipedia.org. Проблема в том, что языка совсем не знаю этого. Мог быть кто нибудь рассказать по алгоритму что в нем делается, что бы мне потом его под delphi переделать. Заранее спасибо

Сам алгоритм вот:


def nod(a, b):
assert a != 0 or b != 0
while b != 0:
a, b = b, a % b
return a

def mr(p):
n = 0
import random
a = random.randrange(0,p)
k = 4

s=0
while ((p-1)%2 !=0):
(p-1) % 2
s+=1

t = (p-1)/(2**s)

metka=0
while n < k:
while nod(p,a) != 1:
a = random.randrange(0,p)
if a**(t)%p != 1:
print “shislo sostavnoe”#n
metka=1
break
n += 1
if metka == 0:
print “shislo prostoe s veroyatnost'u”,1-(0.25**k),“%”

print “ = ”,
k = int(raw_input())
mr(k)



Отредактировано (Фев. 4, 2009 21:50:55)

Офлайн

#2 Фев. 4, 2009 23:33:00

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

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



Офлайн

#3 Фев. 5, 2009 05:38:40

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

вот здесь http://forum2007.algolist.ru/showflat.php?Number=10764&page= алгоритм описан словами. А тот код, что на педивикии кривой как моя жизнь :)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Фев. 5, 2009 07:35:34

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

Офлайн

#5 Фев. 5, 2009 17:19:01

зёма
От:
Зарегистрирован: 2009-02-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

я же не просил вас переписать код на делфи. просто объяснить за что этот код отвечает. где объявление перемен, процедур(функций)…. прям по коду. типо комментария. вот это меня интересовало



Офлайн

#6 Фев. 5, 2009 18:03:54

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Тест Рабина милера на python

1. def nod и def mr это методы/функции. return выход/возврат результат. return a возвращает значение переменной a.
2. Блоки определяются отступами (begin/end). Один отступ для нескольких строк, идущих подряд, одни за другими, это один блок.
3. assert a != 0 or b != 0 - assert и в африке assert.
4. != - <>.
5. a, b = b, a % b - temp := a mod b; a := b; b := temp;
6. import random - импортируется модуль random (типа uses random).
7. random.randrange(0,p) - функция модуля random, целочисленное значение от 0 до p не включая p, т.е. randrange(0, 1) будт всегда возвращать 0.
8. (p-1) % 2 - какой-то бред, результат этого выражения никуда не девается, т.е. тает в воздухе. Да и вообще этот цикл (тот что while ((p-1)%2 !=0):) не будет выполнять своей функции, т.е. он бессмысленен, а чего у него за функция не понятно.
9. %, как ты понял, это mod, а ** - это степень.
10. break - без комментариев (Break).
11. n += 1 - Inc(n) или n := n + 1;
12. if metka == 0: - if metka = 0 then.
13. print - без комментариев (WriteLn).
14. int(raw_input()) - ввод строки пользователем и преобразование её к целому (ReadLn + IntStr).
15. Переменные нигде не объявляются, типизация динамическая.

..bw



Отредактировано (Фев. 6, 2009 11:49:53)

Офлайн

#7 Фев. 6, 2009 05:36:02

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

Тест Рабина милера на python

Из вашего первого поста, я понял, что питон вас не интересует. вот и привел вам ссылку, где есть словестное описание и даже код на паскаль :)

зёма
где объявление перемен, процедур(функций)…. прям по коду. типо комментария. вот это меня интересовало
Все это есть в любой книжке по питону :) Открываете книжку и, через 10 минут, вы поймете весть приведенный вами код, который неработает :) хотя бы потому что
bw
(p-1) % 2 - какой-то бред, результат этого выражения никуда не давается, т.е. тает в воздухе.



Офлайн

#8 Фев. 6, 2009 06:53:04

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Тест Рабина милера на python

bw
(p-1) % 2 - какой-то бред, результат этого выражения никуда не давается, т.е. тает в воздухе.
Ну почему же? Если объект p обрабатывает “-” возвращает что-то, что обрабатывает “%” (да хоть себя же!), то там может быть всё что угодно! Хоть запуск ядерных ракет… :-)



Офлайн

#9 Фев. 6, 2009 11:47:52

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Тест Рабина милера на python

ZZZ, да, такое возможно. Но мы обсуждаем именно тот код, что был приведен в первом сообщении данной темы. Из него очевидно - p это целое число, исходя из этого я сделал заключение относительно проблемного выражения - это бред.

..bw



Офлайн

#10 Фев. 8, 2009 02:25:51

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Тест Рабина милера на python

bw, это у меня просто настроение пошутить было… Не удачно. Простите. :-)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version