Potencia muito grande [RESOLVIDO]

8 respostas
H

pessoal será que alguem pode me ajudar a resolver esse problema:
preciso elevar um numero grande a uma potencia tambem grande, mas ja sei que nao é possivel pq o numero fica muito grande.

estou usando a variavel double, mas mesmo assim o resultado de 102224 elevado a 109 da um resultado que ultrapassa o limite maximo da variavel double.

é o seguinte será que alguem sabe como fazer pra 102224 elevado a 109 modulado a 26531 retornar 25164?

quando faço dá esse resultado:

102224^109 mod 265136 = NaN

8 Respostas

sergiotaborda

handynoturno:
pessoal será que alguem pode me ajudar a resolver esse problema:
preciso elevar um numero grande a uma potencia tambem grande, mas ja sei que nao é possivel pq o numero fica muito grande.

estou usando a variavel double, mas mesmo assim o resultado de 102224 elevado a 109 da um resultado que ultrapassa o limite maximo da variavel double.

é o seguinte será que alguem sabe como fazer pra 102224 elevado a 109 modulado a 26531 retornar 25164?

quando faço dá esse resultado:

102224^109 mod 265136 = NaN

Para quê vc quer fazer isso ?

H

é um trabalho de faculdade! preciso resolver e não to conseguindo!

E

handynoturno:
pessoal será que alguem pode me ajudar a resolver esse problema:
preciso elevar um numero grande a uma potencia tambem grande, mas ja sei que nao é possivel pq o numero fica muito grande.

estou usando a variavel double, mas mesmo assim o resultado de 102224 elevado a 109 da um resultado que ultrapassa o limite maximo da variavel double.

é o seguinte será que alguem sabe como fazer pra 102224 elevado a 109 modulado a 26531 retornar 25164?

quando faço dá esse resultado:

102224^109 mod 265136 = NaN

O Java tem isso prontinho, você só não achou o lugar certo.

É o método “modPow” da classe BigInteger.

Exemplo:

import java.math.BigInteger;
class TesteModPow {
    public static void main(String[] args) {
// 102224^109  mod  26531
        BigInteger bi = BigInteger.valueOf (102224).modPow (BigInteger.valueOf (109), BigInteger.valueOf (26531));
        System.out.println (bi); // deve imprimir 25164
    }
}
Flavio_Luiz

Também tem o BigDecimal mas acredito que o BigInteger tenha maior bits

E

O método ingênuo de primeiro elevar à potência 109, e depois achar o módulo, é lento e pode ter problemas de memória também. O método usado por “modPow” é muito eficiente, tanto em termos de memória, quanto em termos de CPU.

B

Ambos tem precisão infinita.

E

Ambos tem precisão infinita…

… limitada pela memória disponível.
Acho que alguém aqui falou sobre calcular o fatorial de 1 quatrilhão.
Foi mostrado aqui que não dá para calcular esse fatorial simplesmente multiplicando 1 x 2 x 3 … x 1 quatrilhão, porque a memória no computador simplesmente não comporta tantos zeros.
Você precisa usar uma fórmula “fechada” nesses casos.

H

pessoal valew adaptei o BigInteger ao meu programa e deu certo!

mas uma vez agradeço a todos vcs!

Criado 2 de outubro de 2009
Ultima resposta 2 de out. de 2009
Respostas 8
Participantes 5