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...

<[EMAIL PROTECTED]> 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
=========================================================================

Responder a