{"id":1507,"date":"2021-12-14T09:16:49","date_gmt":"2021-12-14T12:16:49","guid":{"rendered":"http:\/\/localhost\/?page_id=1507"},"modified":"2023-01-06T14:48:29","modified_gmt":"2023-01-06T17:48:29","slug":"o-algoritmo-da-exponenciacao-rapida","status":"publish","type":"page","link":"http:\/\/localhost\/index.php\/ensino\/fundamentos-de-algebra\/o-algoritmo-da-exponenciacao-rapida\/","title":{"rendered":"O Algoritmo da Exponencia\u00e7\u00e3o R\u00e1pida"},"content":{"rendered":"
Assuma que $k=[k_m\\cdots k_1k_0]_2$; ou seja,
\n\\[
\nk=2^mk_m+2^{m-1}k_{m-1}+\\cdots+2k_1+k_0.
\n\\]
\nEnt\u00e3o
\n\\[
\na^k=a^{2^mk_m+2^{m-1}k_{m-1}+\\cdots+2k_1+k_0}=\\prod_{i=0}^m a^{2^ik_i}=\\prod_{k_i\\neq 0} a^{2^i}.
\n\\]<\/p>\n
Note que as pot\u00eancias $a,a^2,a^4,a^8,\\ldots$ (m\u00f3dulo $n$) podem ser computadas como $a^{2^{i+1}}=(a^{2^i})^2$ e calcular a sequ\u00eancia $a,a^2,\\ldots,a^{2^m}$ m\u00f3dulo $n$ precisa de $m-1$ multiplica\u00e7\u00f5es e $m-1$ divis\u00f5es euclidianas. Depois multiplicar estas pot\u00eancias na ordem certa precisa de no m\u00e1ximo $m-1$ multiplica\u00e7\u00f5es e $m-1$ divis\u00f5es euclidianas.<\/p>\n
Ent\u00e3o $a^k\\pmod n$ pode ser calculado usando no m\u00e1ximo $2m-2$ multiplica\u00e7\u00f5es e divis\u00f5es euclidianas onde $m=\\lfloor \\log_2 k\\rfloor$.<\/p>\n
O algoritmo que obtemos assim \u00e9 chamado Algoritmo de Exponencia\u00e7\u00e3o (Potencia\u00e7\u00e3o) R\u00e1pida, ou Algoritmo de Exponencia\u00e7\u00e3o (Potencia\u00e7\u00e3o) Modular.<\/p>\n
A seguinte fun\u00e7\u00e3o em Python implementa o Algoritmo de Exponencia\u00e7\u00e3o R\u00e1pida.<\/p>\n
\ndef ExpModN( a, k, n ):\n A = a; P = 1; K = k;\n \n while K != 0:\n \n D = K % 2 \n #o \u00faltimo d\u00edgito de K \n if D == 1: \n P = (A*P) % n\n K = (K-1)\/\/2\n else:\n K = K\/\/2\n A = A*A % n\n return P\n<\/code>\n<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"Nas v\u00e1rias computa\u00e7\u00f5es relacionadas com congru\u00eancias n\u00f3s precisamos calcular $a^k$ m\u00f3dulo $n$ para n\u00fameros $a$, $k$, $n$ que s\u00e3o grandes com centenas ou milhares de d\u00edgitos. Nestes casos multiplicar $k$ vezes o n\u00famero $a$ e tomar o resto do resultado m\u00f3dulo $n$ n\u00e3o pode ser feito. Assuma que $k=[k_m\\cdots k_1k_0]_2$; ou seja, \\[ k=2^mk_m+2^{m-1}k_{m-1}+\\cdots+2k_1+k_0. \\] … Continue reading O Algoritmo da Exponencia\u00e7\u00e3o R\u00e1pida<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1193,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/pages\/1507"}],"collection":[{"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/comments?post=1507"}],"version-history":[{"count":14,"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/pages\/1507\/revisions"}],"predecessor-version":[{"id":1994,"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/pages\/1507\/revisions\/1994"}],"up":[{"embeddable":true,"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/pages\/1193"}],"wp:attachment":[{"href":"http:\/\/localhost\/index.php\/wp-json\/wp\/v2\/media?parent=1507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}