viciado 1 Denunciar post Postado Novembro 5, 2008 #include <stdio.h> #include <stdlib.h> int soma_primos(int n){ int aux,soma; while(aux<=n){ soma = soma+n; aux = aux ++; n = n ++; } return(soma); } int main(){ int n; printf("Forneca o numero\n"); scanf("%d",&n); if(n%2==0){ printf("Numero nao tem nenhum primo\n"); } else{ printf("A soma dos numeros primos e \n %d",soma_primos(n)); } return(0); } Qual o problema pq as respostas sao um absurdo Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2008 Bom, uma frase no teu programa já é um absurdo: printf("Numero nao tem nenhum primo\n"); você primeiro tem que explicar direito o que você quer: é a soma dos primos de 2 até N ou é a soma de N primos? Se for a soma de N primos, em 1996 dois caras mostraram que essa soma é "mais ou menos" (N2/2) * ln N (então dá pra fazer meio direto também). As somas são absurdas porque o algoritmo inteiro está errado. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 5, 2008 Como eu calculo o logaritmo neperiano em c? Existe uma função da biblioteca math.h? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2008 Função log. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 6, 2008 Função log. #include <stdlib.h> #include <stdio.h> #include <math.h> double neperiano(int n){ double log (double n); return(n); } double soma(int n){ double ln, soma; ln = neperiano(n); soma = ((n*n)/2)*ln; return(soma); } int main() { int n; printf("Informe o numero\n"); scanf("%d",&n); printf("A soma dos numeros primos e \n %lf",soma(n)); system("PAUSE"); return 0; }Tem algum problema de logica ou essa formula nao funciona pq as respostas estao erradas. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 6, 2008 Não. A fórmula está certa; foi demonstrada e tudo. E não disse que ela dava o resultado exato. Teu código não tá nem retornando o valor certo da fórmula. double neperiano(int n){ double log (double n); return(n); } double soma(int n){ double ln, soma; ln = neperiano(n); soma = ((n*n)/2)*ln; return(soma); } =>n=1 : 2 ; S(1) = 0,3465 =>n=2 : 5 ; S(2) = 1,3862 =>n=3 : 10 ; S(3) = 4,9437 O problema do teu primeiro algoritmo é que você nem sequer verifica se N é primo e vai somando. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 6, 2008 desculpa mais nao entendi o q você explicou Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 6, 2008 bom pelo q eu entendi q ela disse, verifique primeiro c o numero é primo Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Novembro 6, 2008 bom pelo q eu entendi q ela disse, verifique primeiro c o numero é primo Mais vou ter qverificar um por um ate N como posso fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 6, 2008 Tem trocentos tópicos sobre números primos aqui. EDIT: não precisa ser até N. Até sqrt(N) resolve. Compartilhar este post Link para o post Compartilhar em outros sites