soma = soma++;
n�o pode em C.
Tudo bem, pode. Tudo bem, vai compilar. Mas n�o est� definido pela linguagem. Como n�o est� definido, o comportamento pode n�o ser o esperado. Digamos n = 3;
n = n++;
Tem compilador que ap�s essa linha faz n = 3, tem compilador que faz n=4, tem compilador que faz n=7... mas n�o quer dizer que n n�o possa ter qualquer outro valor. � completamente indefinido.
Outra coisa: vc fez int k = fatorial(i);
Seja l� como estiver definida a fun��o fatorial, ela deve retornar int, ou ent�o haver� um cast implicito a�. Nos pcs "normais", um int tem 32 bits. Ou seja: se n>13, n! > INT_MAX, logo o resultado de 14! ser� errado.
Tudo bem, suponhamos que no seu pc/os o int tenha 64 bits. Ent�o se n>21, n! j� n�o cabe mais no int de 32 bits.
precisamos de outra solu��o...
:)
abra�o
bruno
On 5/22/05, Ronaldo Luiz Alonso <[EMAIL PROTECTED]> wrote:
>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
=========================================================================
--
Bruno Fran�a dos Reis
email: bfreis - gmail.com
gpg-key: http://planeta.terra.com.br/informatica/brunoreis/brunoreis.key
icq: 12626000
e^(pi*i)+1=0

