quinta-feira, 8 de janeiro de 2009

Determinando o número de dígitos

Olá! Enquanto ainda não implementamos o uso de de Latex aqui no blog, vou inaugurar a seção de matemática com uma curiosidade. É bastante simples.

O problema consiste em saber quantos dígitos tem um número x, inteiro, qualquer.

Antes de qualquer coisa é preciso notar que qualquer número inteiro está entre duas potências consecutivas de 10. Isto é:

10^k =< x < 10^(k+1)

Feito isso, vamos a um exemplo, k=2:

10^2 =< x < 10^3

Experimentando alguns valores, perceberemos que x terá exatamente 3 dígitos. Isto é fácil verificar, pois ele pode ser escrito da forma: 100*a + 10*b + c, onde a,b,c são inteiros que representam seus algarismos. Apesar de isto não constituir uma prova matemática, afirmaremos
que, então, o número de algarismos de x será k+1.

Tendo esta lei em mão, calculemos o número de algarismos de 3^2009!

10^k =< 3^2009 < 10^(k+1) - aplicando log na base 10 nesta desilgualdade, ficamos com:
k =< 2009*log(3) < k+1 - com uma calculadora resolvemos log(3),
k =< 2009*0,477 < k+1 - então,
k =< 958,536 < k+1 - como k é inteiro, então k=958 e k+1=959

Portanto, 3^2009 possui 959 dígitos!

Até a próxima.




8 comentários:

Ekbair disse...

Super útil, né Tiago! :H


;*

Gabriel Martins disse...

Clássica xD
Muito legal esse problema 8D

Thiago S. Mosqueiro disse...

Podemos definir uma função que me retorna diretamente? Seria algo do tipo int( log(x) ), com int sendo a função que retorna o inteiro 'mais próximo' (devidamente definida) do argumento. Está correto?

T disse...

Acredito que seja isso mesmo. Mas como eu colocaria para aproximar o float para um int logo acima, isto é, o k+1?

Thiago S. Mosqueiro disse...

Não apenas isso, reparei num detalhe. Como você disse que x deveria ser inteiro, a função fica errada. Essa função valeria apenas para inteiros positivos (ou seja, naturais sem zero). Acho que a função correta seria

f : Z* --> Z* ,
x |--> int( log(|x|) )

Z* seriam os inteiros sem zero. Claro que usando a int que você observou. Eu testei para alguns casos, e deu certo. Interessante também é verificar o gráfico dessa função f.

PS hehehe float lembra muito computação... int é a função que retorna o inteiro seguinte ao real dado como argumento.

T disse...

Entendi. Sobre o float, é que eu tava programando, aí embaralhou minha mente.

Quando eu fiz isso, eu nem tinha pensado sobre os inteiros negativos (falha minha). Mas quando usamos números negativos. Ex: 122. Então -10^3 < 122 =< 10^2. 3 seria o número de dígitos, então vc deveria aproximar "para trás". Correto?

Thiago S. Mosqueiro disse...

Vamos aplicar na função f definida?

f(-122) = int( log( |-122| ) )
f(-122) = int( 2.08... )
f(-122) = 3

Então, está aparentemente certinho, pelo que parece. Isso porque os expoentes das partes desiguais que seguram o resultado não modificam-se. Talvez tenha um caso em que não consigo pensar agora...

T disse...

Desculpa, nao tinha visto o módulo. É, parece que a função tá bem definida.