A formação parisiense dos pintores portugueses do fim do século: Os casos de estudo de Souza Pinto (1856-1939) e Alves Cardoso (1882-1930)

matemática - Como fazer exponenciação usando como operação aritmética a multiplicação em Portugol? - Stack Overflow em Português
Preciso fazer um pseudocódigo que tem numero1 e numero2 (tem que ser numeros naturais menores que 50), preciso elevar o numero1 ao numero2, apenas usando a operação de multiplicação, e mostrar o resultado. Como faço?
Você deseja fazer a exponenciação de dois números naturais? Por sorte, eu já tratei de um problema recentemente que envolvia calcular a exponencial de dois números reais. Para isso, precisei da definição de exponenciação, que é dada usando expoente natural não nulo e, só depois da definição, é extrapolado para todos os outros números. Vale a pena conferir a resposta dada, é engrandecedora e trata de diversos assuntos matemáticos.
A exponenciação natural é igual direta ao ponto (desconsidere o 0 como natural agora). O expoente indica quantas vezes você deve multiplicar a base no seguinte algoritmo [para a forma b^n]:
Então com uma simples recursão resolveríamos o problema, certo? Na verdade, ainda é necessário aparar algumas arestas. A primeira é o caso do 0. Na reposta citada no começo desta aqui eu explico como se chega na convenção de que qualquer número diferente de 0 elevado a 0 é 1.
Uma das outras arestas é que poderíamos ter um algoritmo que roda em um tempo bem menor, mais especificamente em o(log n) multiplicações. Esse algoritmo se faz valer da estratégia de divisão e conquista usando uma espécie de meoização. A ideia é a seguinte:
Note como a quantidade de operações agora diminuiu bruscamente. Antes, ao se chegar na conclusão do valor de b^n, você ainda precisaria fazer mais n multiplicações até chegar em b^2n. Agora em apenas uma operação se obtém b^2n. O pseudocódigo fica assim (já tratando de casos de expoente ímpar):
Outro ponto seria que... talvez recursão fosse considerado uma trapaça? Bem, então precisaríamos recorrer a laços. Felizmente recursão de cauda (como a primeira versão do algoritmo que faz o(n) multiplicações) é fácil transformar em laço. Podemos usar o seguinte meta-algoritmo:
acumule a parte não recursiva na variável retorno de acordo com a fórmula recursiva, então faça com que os parâmetros sejam atualizados antes de começar a outra iteração
Bem, fica ineficiente comparado a outra versão mas com certeza não é trapaça. Então, ainda tem mais uma aresta?
Sim, tem. E essa aresta é das grandes. Devo até dizer que foi pegadinha de quem passou a atividade. Se você pegar o caso extremo das entradas (b == 49 e n == 49, visto que na descrição das entradas os números são menores que 50, portanto excluindo igualdade), você necessita de 49 * log2(49) ~= 276 bits para representar a magnitude desse número! Levando em consideração que um dos bits não é usado para valor (o chamado de bit do sinal), são necessários 277 bits! Só o caso de 2^49 implica usar números de pelo menos 51 bits para conseguir representar esse número. Esses números excedem os 32 bits típicos para se armazenar os inteiros em Portugol (fonte)