Eukir - Challenge 2- HardCore-C

Ir em baixo

Eukir - Challenge 2- HardCore-C

Mensagem  Eukir em Seg Jul 18, 2011 7:17 pm

E ae galera.. Este é o primeiro desafio que posto e espero que esteja correto. Qqer coisa avisem...

Pra programar eu usei o Scite, e pra compila eu usei o GCC do Ubunto10.10

2 - A soma dos números primos abaixo de 10 é 2 + 3 + 5 + 7 = 17.
Faça um programa que encontre e imprima a soma de todos os números primos abaixo de dois milhões como também, imprima quantos números foram encontrados.

Resposta:


 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*DEFINE BIBLIOTECAS*/
#include <stdio.h>
#include <math.h>
/*FUNÇÃO PRINCIPAL*/
int main()
{
/*DEFINE VARIAVEIS*/
int cont=1;
int i=1;
unsigned int cont_primos = 0;
float resultado=0;

/*VARIAVEL ESPECIAL QUE IRÁ GUARDAR A SOMA DOS NUMEROS PRIMOS*/
/*UNSIGNED -> SOMENTE VALORES POSITIVOS, PARA TERMOS UM ALCANCE MAIOR*/
/*LONG -> ALMENTA A CAPACIDADE DE ARMAZENAÇÃO*/
unsigned long long int soma=0;

for(i=1;i<=2000000;i++)/*FOR QUE CONTA ATE 2000000*/
{
for(cont=1;cont<=i;cont++)/*FOR QUE TENTA ENCONTRAR OS NUMEROS PRIMOS RELACIONADOS A "I"*/
{

/*VARIAVEL "RESULTADO" É IGUAL AO RESTO DA DIVISAO DE I/CONT*/
resultado=i%cont;


/*ESTA CONDIÇÃO DEIXA O PROGRAMA MAIS RAPIDO, PORQUE COM ELA, SÃO TESTADO TODOS OS RESULTADOS ONDE O RESTO DA DIVISAO É IGUAL A ZERO.
CASO "I" NÃO SEJA IGUAL A CONT, EVITA-SE DE CONTINUAR A FAZER CALCULOS DESNECESSÁRIOS POIS SE O RESTO DA DIVISAO É IGUAL A ZERO E O VALOR
DO DIVIDENDO NÃO É IGUAL AO VALOR DO DIVISOR, ESTE NUMERO NÃO É PRIMO. IGUALA-SE ENTÃO "CONT" A "I" PARA FORÇAR A SAÍDA DO LAÇO*/
if(resultado==0 && cont!=1)
{
if(i==cont)
{
cont_primos++; /*CONTA A QUANTIDADE DE NUMEROS PRIMOS*/
soma=soma+i; /*SOMA OS VALORES PRIMOS*/
printf("\n%d\t-> %d e primo!\nsoma = %lli\n",cont_primos,i,soma); /*IMPRIME CADA NUMERO PRIMO ENCONTRADO*/
}
else
cont=i;
}
}
}

printf("\nQuantidade de numeros primos encontrados = %d;\nValor da soma dos numeros primos = %lli\n\n",cont_primos,soma);/*IMPRIME OS RESULTADOS FINAIS*/

return 0;
}



Última edição por Eukir em Ter Jul 19, 2011 9:09 am, editado 1 vez(es)
avatar
Eukir

Mensagens : 8
Data de inscrição : 16/07/2011
Idade : 27
Localização : Curitiba / PR

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Z3r0 em Seg Jul 18, 2011 7:45 pm

OPa.
Bom te ver participando Eukir. Espero que goste dos desafios....e participe dos próximos challenges também Smile
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Z3r0 em Seg Jul 18, 2011 7:48 pm

Rodei seu código.... demorou mas rodou ( pqp ... tanto de numero )...
avatar
Z3r0

Mensagens : 149
Data de inscrição : 01/07/2011
Idade : 32

Ver perfil do usuário http://projectzim.blogspot.com

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Eukir em Seg Jul 18, 2011 8:01 pm

Z3r0 escreveu:Rodei seu código.... demorou mas rodou ( pqp ... tanto de numero )...

TA demorando mesmo....

Ta lento por causa dos prints tambem, eu coloquei eles justamente por que podem pensar que o programa ficou num loop infinito, assim ao menos os resultados sao avaliados.... se tirar os prints fica mais rapido... mesmo assim... 2000000 é muita coisa.... se vc testar com 100, 1000 vai rapidinho mas 20000000 é muita coisa....


Essa foi a primeira logica que veio na minha cabeça... Talvez exista uma melhor...
avatar
Eukir

Mensagens : 8
Data de inscrição : 16/07/2011
Idade : 27
Localização : Curitiba / PR

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Wagnesio em Seg Jul 18, 2011 9:09 pm

ao inves de usar soma=soma+i, em C é interessante usar soma += i (A interpretação seria acrescente o valor de i à soma). Serve também para divisão: soma/=i (pega soma dividi por i e atribui o valor à soma); multiplicação(soma+=i) e subtração(soma-=i).
A lógica está certa, com a ajuda da matematica o programa pode ficar mais rápido.
avatar
Wagnesio

Mensagens : 4
Data de inscrição : 04/07/2011

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Eukir em Ter Jul 19, 2011 9:10 am

Wagnesio escreveu:ao inves de usar soma=soma+i, em C é interessante usar soma += i (A interpretação seria acrescente o valor de i à soma). Serve também para divisão: soma/=i (pega soma dividi por i e atribui o valor à soma); multiplicação(soma+=i) e subtração(soma-=i).
A lógica está certa, com a ajuda da matematica o programa pode ficar mais rápido.

Verdade cara... vc tem razão... vou prestar mais atenção nisso...
Valeu!
avatar
Eukir

Mensagens : 8
Data de inscrição : 16/07/2011
Idade : 27
Localização : Curitiba / PR

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Eukir - Challenge 2- HardCore-C

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum