[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [obm-l] Re: [obm-l] potência de 2



Claro, claro...
Este e um problema meio bracal, mas nao tento (e
possivel programar computadores de um modo mais
esperto, acredite!).
Bem, ha uma formula que diz quale a maior potencia de
2 que divide n!.
Veja um caso particular pequeno: n = 16

0[2^0=1]     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
1[2^1=2]       2   4   6   8   10    12    14    16 
2[2^2=4]           4       8         12          16 
3[2^3=8]                   8                     16 
4[2^4=16]                                        16
 
Pergunta: O que e essa tabela?
Resposta: Ela te diz: na linha onde esta marcado o
numero n, o valor entre colchetes diz quais os numeros
tem este valor como multiplo.
Veja que cada linha contem, em media, metade da
anterior.
Ta lancada a dica.
Bem, a somatoria das f's e algo mais chato...

<ronaldo.luiz.alonso@bol.com.br> escreveu:
> >Sabendo  que  f(n)  é  maior potência  de  2  que 
> divide  n! ,
> >determine  o valor  de
> >f(1) + f(2) +...+ f(1023) .
> 
> Vejamos mais de perto:
> 
> 1! = 1  a maior potência de 2 que divide 1! é 0 (2^0
> = 1).
> 2! = 2  a maior potência de 2 que divide 2! é 1 (2^1
> = 2).
> 3! = 6=3.2.1  a maior potência de 2 que divide 3! é
> 1 (2^1 = 2).
> 4! = 24 = 4.3.2.1  a maior potência de 2 que divide
> 4! é 3 (2^3 = 8).
> ...
> Pelos exemplos acima parece que não há uma regra
> geral.
> 
>  Note que com 5! por exemplo, a maior potência de 2
> que divide 5!
> continua sendo 3 (porque 5 é primo).
> 
>           Mas no caso de 6 (que não é primo)
> a maior potência de 2 que divide 6! será 4.
> 
>                 Peço desculpas  a quem não sabe C,
> mas eu faria um programa
> de computador para calcular a soma (pois o
> computador atrofiou meu cérebro)
> e desafio alguém a pensar em algo mais "força bruta"
> e feio que isso:
> 
> /*  calcula a soma   f(1) + f(2) + ...+ f(x) */
> unsigned int soma_pot2_fatorial( unsigned int x)
> {     int i;
>     soma =0
>     for (i = 1; i <= x; i++)
>     {
>          int k = fatorial (i); /* calcula o fatorial
> de i -- note que k é
> uma variável de escopo local */
>          while (( k % 2) == 0){  /* enquanto o resto
> da divisão por 2 for
> zero */
>             soma = soma++; /* incrementa soma */
>              k = k/2; /* k recebe a parte inteira da
> divisão de k por 2 */
>          }// fim enquanto
>      }// volta ao laço com o valor de i
> incrementado.
>      return soma;
> }
> 
> Acho que não isso não ajuda, mas
> pelo menos calcula a soma pedida ...
> 
> []s  Ronaldo L. Alonso
> 
>
=========================================================================
> Instruções para entrar na lista, sair da lista e
> usar a lista em
> http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
>
=========================================================================
> 

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger 
http://br.download.yahoo.com/messenger/ 
=========================================================================
Instruções para entrar na lista, sair da lista e usar a lista em
http://www.mat.puc-rio.br/~nicolau/olimp/obm-l.html
=========================================================================