![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
SeregaR1Val |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 37 Пол: Мужской Реальное имя: Серёга Репутация: ![]() ![]() ![]() |
В принципе реализация алгоритма понятна, проблемы с нахождением первообразного корня по модулю m
http://ru.wikipedia.org/wiki/Первообразный..._(теория_чисел) И понятия не имею как это запрограммировать, если можете, помогите пожалуйста. В методичке есть реализация на C++, а обучение на Delphi, поэтому непонятно вообще ... Реализация Функция powmod() выполняет бинарное возведение в степень по модулю, а функция generator (int p) - находит первообразный корень по простому модулю (факторизация числа здесь осуществлена простейшим алгоритмом за ). Чтобы адаптировать эту функцию для произвольных , достаточно добавить вычисление функции Эйлера в переменной phi. int powmod (int a, int b, int p) { Сообщение отредактировано: SeregaR1Val - 26.04.2010 20:15 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ну, а теперь посмотри внимательно на функцию (я не запускаю, мне сейчас негде проверить, Дельфя здесь не установлена, но это видно и без запуска). Если (per mod p) = 0 выполняется - то ты что-то присваиваешь в Result, а если нет? Вот закончился цикл, и ни для одного kaa (чувствую себя Киплингом прямо) это условие не выполнилось, что функция вернет, ты подумал? Мусор она вернет. Что в стеке валялось на том месте, где была создана переменная Result - то и вернется тебе под видом результата...
Либо в самом начале либо в самом конце функции присвой Result-у значение, которое будет возвращаться при невыполнении условия. |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 11:16 |