Potencia muito grande [RESOLVIDO]

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

[quote=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[/quote]

Para quê vc quer fazer isso ?

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

[quote=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[/quote]

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
    }
}

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

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.

Ambos tem precisão infinita.

Ambos tem precisão infinita…[/quote]

… 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.

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

mas uma vez agradeço a todos vcs!