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!