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.
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.
Se for isso (223 elevado a 1024) mod 7, o valor é 1.
G
gustavorozolin
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
gustavorozolin
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
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:
G
gustavorozolin
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
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.
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
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:
cara naum querendu ser chato mais qual eh o metodo q vc usa pra pegar a quantidade de digitos??
obrigado
G
gustavorozolin
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:
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
thingol
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:
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.