Problemas com numeros muito grandes - MENSAGEM: NaN - - HELP

ola galera,
to tendo problemas, to fazendo um trabalho da faculdade, e tive q implementar uma conta de elevar um numero a um valor enorme,
por exemplo 2 elevado a 5000! e quando eu compilo e rodo o codigo, ele naum da a resposta, ele resulta em
INFINITY
achu q para isso, não tem solução, mas na verdade, eu tinha que implementar uma coisa do tipo: uma base elevado a um numero “grande”(no maximo 3 casas), e achar o resto da divisao com um numero altamente grande(por volta de 1 milhao),
por exemplo:
3 elevado a 653 (MOD 85590017)

o programa resulta em NaN (not a number)

escrevi em java assim:
double r=(Math.pow(3,653))%85590017;

POR FAVOR, ALGUEM SABE ALGUM JEITO, DE IMPLEMENTAR ISSO, SEM DAR ESTE ERRO NaN???
TO DESESPERADO AQUI, JA TENTEI TUDO, COMO COMEÇEI A PROGRAMAR EM JAVA TEM POUCO TEMPO, AINDA TO COM UMAS DIFICULDADES! :sad:

Dê uma olhada nas classes BigInteger e BigDecimal:

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html

Ex.:

BigInteger big = new BigInteger("2"); BigInteger res = big.pow(5000);