Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2011, 11:26   #1
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию возведение в степень и взятие по модулю

мне нужно возвести очень длинное число (порядка 1000 знаков в десятичной системе) в очень большую степень (так же порядка 1000 знаков в десятичной системе) и взять от этого числа модуль. ну проще говоря
a^b % d
само собой a^b считать не реально, это и очень долго и очень длинное число получится (порядка 1 000 000 знаков)
может есть какое то свойство этой операции чтобы обойтись без a^b ??
Kukurudza вне форума Ответить с цитированием
Старый 19.11.2011, 11:29   #2
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

никаких свойств нет. единственный способ - реализоваться длинную арифметику. проще говоря считать вручную в столбик
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.11.2011, 23:04   #3
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Можно написать программу для работы со сверхдлинными числами, например с 65536-ричной системой счисления. Можно ужасно большие числа в ужасно большие степени возводить))
alexey_kip вне форума Ответить с цитированием
Старый 21.11.2011, 08:11   #4
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

такая библиотека есть. позволяет работать с числами до 4096 бит. но все равно не вмещается. препод говорит есть какой то специальный способ проводить такую операцию без возведения в степень. но какая не говорит
Kukurudza вне форума Ответить с цитированием
Старый 21.11.2011, 10:51   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

информация к размышлению, для тек кто забыл.
(ax +b) *(cx+d) =acxx +adx +bcx +bd =(acx + ad + bc)*x +bd

(ax+b)*(cx+d) % x =?
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 21.11.2011, 11:24   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
(ax+b)*(cx+d) % x =?
ход мыслей понравился! +1

а можно для тех, кто подзабыл математику (я себя имею в виду)
продолжить вывод для :
((ax+b)*(ax+b)*(ax+b) .... * (ax+b) ) % x = ???

если (ax+b) перемножаются N раз,
то это будет b^N % x

Код:
otvet = b % x;
for (i=1;i<N;i++)
  otvet = (otvet * b ) % x;
так?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2011, 14:33   #7
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

а тебе что, результат с абсолютной точностью нужен? в таких больших числах, в прочем как и любых абсолютная точность ни к чему. да такавой просто и не бывает.
к примеру гиря 1кг - точнее
1.0 - точнее
1.00 - точнее
1.000- так этому конца не будет. можно писать числа со сколь угодно большим колличеством знаков, как до запятой так и после. на деле окажется что такие длинные числа лиш математическая выкладка и не более, в реальном мире смысла не имеют. и для чего такие задачи? я так-бы преподу и сказал
а число которое ты указал это даже больше числа атомов во вселенной

Последний раз редактировалось SAMOUCHKA; 21.11.2011 в 14:39.
SAMOUCHKA вне форума Ответить с цитированием
Старый 21.11.2011, 15:19   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SAMOUCHKA, чепуху Вы говорить изволите! Это раз.

Говорить преподу, что задание глупое, потому что таких чисел в природе не бывает - бессмысленно и бесполезно. Это два.

третье.
Цитата:
а число которое ты указал это даже больше числа атомов во вселенной
Напомните, мне, пожалуйста, сколько у нас атомов во вселенной?..

и чётвёртое (последнее). А каким образом данная задача связана с числом атомов во вселенной?! Что, если числа большие, так можно и не напрягаться, так?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2011, 17:43   #9
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

Ну это для алгоритма RSA. криптография. Да, препод всегда прав, если препод не прав, смотри пункт один у меня числа целые. без запятых
Kukurudza вне форума Ответить с цитированием
Старый 21.11.2011, 17:54   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

имхо, проще взять готовое и не парить мозг

http://www.submanifold.be/triade/GInt/gint.html
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
возведение в степень [CODER] Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 14.04.2014 10:18
Возведение в степень Mambakremen Помощь студентам 1 14.11.2010 08:54
взятие остатка по модулю whtfng Помощь студентам 4 30.05.2010 17:32
возведение в степень Lissisa Помощь студентам 1 21.03.2009 22:34
Возведение в степень Stanislav Общие вопросы Delphi 10 05.12.2007 23:34