Programação com números inteiros gigantes
Quanto é o fatorial de 5? 120, fácil, não? E quanto é o fatorial de 6000? É um número com 20 mil dígitos. És capaz de escrever um programa que calcule isto? Depois de ler este artigo, você será!
Parte 3: Esse Python!
Infelizmente eu não programo em Python, mas se tem uma linguagem que passei a admirar é esta.
Causou-me surpresa enorme ao constatar que o python trabalha com inteiros de qualquer tamanho de forma natural. Simples, é só usar. Não precisa declarar nada nem usar funções específicas. Ele pura e simplesmente já vem com suporte a números inteiros grandes em sua sintaxe. Maravilha!
Para demonstrar isto, segue uma versão em python de um código que calcula o fatorial de qualquer número:
Salve este código em seu disco, dê permissão de execução e pronto, você já pode calcular o fatorial de 6000 do enunciado (se você não programa em python, tome muito cuidado com as indentações. São importantes pois são elas que definem o que está dentro ou fora do laço).
Como não teria sentido encher este capítulo de números, segue um exemplo do cálculo do fatorial de 200:
./fatorial.py 200
Fatorial de 200 eh 78865786736479050355236321393218506229513597768717
326329474253324435944996340334292030428401198462390417721213891963883
025764279024263710506192662495282993111346285727076331723739698894392
244562145166424025403329186413122742829485327752424240757390324032125
740557956866022603190417032406235170085879617892222278962370389737472
0000000000000000000000000000000000000000000000000
O Python foi capaz de calcular o fatorial de 80.000 em 50s usando um processador de 2.4Ghz, sendo que a resposta deste fatorial gera um número com 357.507 dígitos! Esta aí uma linguagem que eu respeito!
Das linguagens que pesquisei, Python é a única que tem suporte a inteiros gigantes nativo. Veja, das que eu pesquisei. Existem muitas e inúmeras linguagens, mas no Java e no C este suporte não é nativo.
Causou-me surpresa enorme ao constatar que o python trabalha com inteiros de qualquer tamanho de forma natural. Simples, é só usar. Não precisa declarar nada nem usar funções específicas. Ele pura e simplesmente já vem com suporte a números inteiros grandes em sua sintaxe. Maravilha!
Para demonstrar isto, segue uma versão em python de um código que calcula o fatorial de qualquer número:
#!/usr/bin/python
import sys;
for x in sys.argv[1:]:
fat = 1;
f = int(x);
i = 2;
while i <= f:
fat = fat * i;
i = i + 1;
print "Fatorial de ",f,"é ",fat;
print "Fim";
import sys;
for x in sys.argv[1:]:
fat = 1;
f = int(x);
i = 2;
while i <= f:
fat = fat * i;
i = i + 1;
print "Fatorial de ",f,"é ",fat;
print "Fim";
Salve este código em seu disco, dê permissão de execução e pronto, você já pode calcular o fatorial de 6000 do enunciado (se você não programa em python, tome muito cuidado com as indentações. São importantes pois são elas que definem o que está dentro ou fora do laço).
Como não teria sentido encher este capítulo de números, segue um exemplo do cálculo do fatorial de 200:
./fatorial.py 200
Fatorial de 200 eh 78865786736479050355236321393218506229513597768717
326329474253324435944996340334292030428401198462390417721213891963883
025764279024263710506192662495282993111346285727076331723739698894392
244562145166424025403329186413122742829485327752424240757390324032125
740557956866022603190417032406235170085879617892222278962370389737472
0000000000000000000000000000000000000000000000000
O Python foi capaz de calcular o fatorial de 80.000 em 50s usando um processador de 2.4Ghz, sendo que a resposta deste fatorial gera um número com 357.507 dígitos! Esta aí uma linguagem que eu respeito!
Das linguagens que pesquisei, Python é a única que tem suporte a inteiros gigantes nativo. Veja, das que eu pesquisei. Existem muitas e inúmeras linguagens, mas no Java e no C este suporte não é nativo.
Para os iniciantes em C (como eu) isto é de grande ajuda.
Agora finalmente vou conseguir implementar meu código de forma eficiente para tentar vencer seu próximo desafio... :-)
[]s
Cloves Jr