Inteiro gigantesco

13 respostas
G

Olá pessoal eu sou iniciante no mundo Java e estou com um problema eh q em java os valore inteiro tem limite para armazenar numero. Eu precisava de uma classe para armazernar um numero estremamente gigante.
seria pra resolver esse calculo aqui

(223^1024)mod7 ((223 elavado a 1024) mod 7)
é possivel realizar isso?
obrigado pela atenção.

13 Respostas

T

Você pode usar a classe BigInteger, que tem os métodos adequados para fazer essa exponenciação modular. modPow já faz essa conta para você de uma forma muito, muito mais eficiente que executar a exponenciação e depois calcular o módulo.

BigInteger.modPow

G

Obrigado pela ajuda amigo vou tentar aqui.
Abraço

T
import java.math.*;
class ModPow {
    public static void main(String[] args) {
        BigInteger bi = new BigInteger ("223");
        System.out.println (bi.modPow (new BigInteger ("1024"), new BigInteger ("7")));
    }
}

Se for isso (223 elevado a 1024) mod 7, o valor é 1.

G

thingol:
import java.math.*; class ModPow { public static void main(String[] args) { BigInteger bi = new BigInteger ("223"); System.out.println (bi.modPow (new BigInteger ("1024"), new BigInteger ("7"))); } }
Se for isso (223 elevado a 1024) mod 7, o valor é 1.

O loco vc jah até fez a conta uahauhuaha
vlw amigo obrigado.

G

pq eh tao rapido assim como o computador trabalha com issu ???
pois 223 elevado a 1024 vai dar um numero com mais de 2000 caracteres
Obrigado mais uma vez.

T

Matemática tem seus truques. Como você disse, 223 elevado a 1024 tem exatamente 2405 dígitos. Mas não é preciso calcular a potência primeiro e depois efetuar o cálculo do resto.

Se você quer saber como é que isso foi implementado em Java, leia o seguinte artigo da Wikipedia:

G

cara vc eh baum mesmo heim sou seu fã.
abraço.

Fernando_Generoso_da

Não li o artigo, mas é fácil de pensar:

Tomo como exemplo o número 8:

8 mod 7 = 1
8^2 mod 7 = 64 mod 7 = 1
8^3 mod 7 = 512 mod 7 = 1
8^4 mod7 = 4096 mod 7 = 1

percebe-se que não importando o expoente, o valor sempre vai dar o mesmo…

Me corrijam se eu falei alguma besteira… :lol:

T

Fernando Generoso da Rosa:
Não li o artigo, mas é fácil de pensar:

Tomo como exemplo o número 8:

8 mod 7 = 1
8^2 mod 7 = 64 mod 7 = 1
8^3 mod 7 = 512 mod 7 = 1
8^4 mod7 = 4096 mod 7 = 1

percebe-se que não importando o expoente, o valor sempre vai dar o mesmo…

Me corrijam se eu falei alguma besteira… :lol:

Você mais ou menos falou uma besteira.
10 mod 7 = 3, 100 mod 7 = 2, 1000 mod 7 = 6 e assim por diante.

É que calhou de seu exemplo dar certo, porque quando o número original é congruente a 1 (mod 7), suas potências também são congruentes a 1 (mod 7).

O correto é o que está escrito no tal artigo.

Fernando_Generoso_da

thingol:
Fernando Generoso da Rosa:
Não li o artigo, mas é fácil de pensar:

Tomo como exemplo o número 8:

8 mod 7 = 1
8^2 mod 7 = 64 mod 7 = 1
8^3 mod 7 = 512 mod 7 = 1
8^4 mod7 = 4096 mod 7 = 1

percebe-se que não importando o expoente, o valor sempre vai dar o mesmo…

Me corrijam se eu falei alguma besteira… :lol:

Você mais ou menos falou uma besteira.
10 mod 7 = 3, 100 mod 7 = 2, 1000 mod 7 = 6 e assim por diante.

É que calhou de seu exemplo dar certo, porque quando o número original é congruente a 1 (mod 7), suas potências também são congruentes a 1 (mod 7).

O correto é o que está escrito no tal artigo.

sorry!! :oops:

Não consigo entrar aqui (proxy)… mas vou ler…fiquei curioso. Vlw

G

thingol:
Matemática tem seus truques. Como você disse, 223 elevado a 1024 tem exatamente 2405 dígitos. Mas não é preciso calcular a potência primeiro e depois efetuar o cálculo do resto.

Se você quer saber como é que isso foi implementado em Java, leia o seguinte artigo da Wikipedia:

http://en.wikipedia.org/wiki/Modular_exponentiation


cara naum querendu ser chato mais qual eh o metodo q vc usa pra pegar a quantidade de digitos??
obrigado

G

gustavorozolin:
thingol:
Matemática tem seus truques. Como você disse, 223 elevado a 1024 tem exatamente 2405 dígitos. Mas não é preciso calcular a potência primeiro e depois efetuar o cálculo do resto.

Se você quer saber como é que isso foi implementado em Java, leia o seguinte artigo da Wikipedia:

http://en.wikipedia.org/wiki/Modular_exponentiation


cara naum querendu ser chato mais qual eh o metodo q vc usa pra pegar a quantidade de digitos??
obrigado

naum precisa mais naum cara jah consegui converti pra string e peguei o length
Obrigado

T

gustavorozolin:
thingol:
Matemática tem seus truques. Como você disse, 223 elevado a 1024 tem exatamente 2405 dígitos. Mas não é preciso calcular a potência primeiro e depois efetuar o cálculo do resto.

Se você quer saber como é que isso foi implementado em Java, leia o seguinte artigo da Wikipedia:

http://en.wikipedia.org/wiki/Modular_exponentiation


cara naum querendu ser chato mais qual eh o metodo q vc usa pra pegar a quantidade de digitos??
obrigado

log10 de 223 é 2,3483048630481606734751762162404
Multiplicando esse valor por 1024 temos 2404,6641797613165296385804454301
Arredondando esse valor para cima temos 2405, que é o número de dígitos desse valor.

Criado 20 de março de 2009
Ultima resposta 20 de mar. de 2009
Respostas 13
Participantes 3