Algoritmos números primos em C [RESOLVIDO]

1. Algoritmos números primos em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/04/2015 - 19:15h

Boa noite a todos e a todas, to com uma dúvida meio de iniciante e queria pedir a ajuda de vocês .
É um algoritmo simples que recebe como entrada uma lista de inteiros e retorna a quantidade de números primos, eis o que eu fiz :

/*Retorna a quantidade de numeros primos da lista*/
int primos(Lista* l){
Lista* lAux=l;
int i;
int cont=0;
int primos=0;
while(lAux!=NULL){
for(i=lAux->info; i>=1; i--){
if (lAux->info % i == 0)
cont++;
}

if (cont == 2)
primos++;
lAux=lAux->prox;
}
return primos;
}
O problema é que não incrementa a variável de saída, o primos sempre é 0.
Alguém pode me ajudar?
Obrigado desde Já.


  


2. Resetar a variável count

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 21/04/2015 - 23:48h

Boa noite, amigo.

if (count == 2)... Aqui está o problema. Se o primeiro número que você testar não for um primo e tiver mais de 2 divisores, já ferrou com seu algoritmo.

O problema? Você não reseta o contador a cada iteração do loop. Tenta colocar um "count = 0;" no final do loop... (Depois do incremento da lista encadeada)

Tenta usar uma função com uma performance *um pouco* melhor para achar os números primos. Algo assim:

int prime (int n)
{
register int i;

for (i = 2; i * i < n + 1; i++ )
if ( n % i == 0 ) return 0;

// it is prime
return 1;
}


[]'s




3. Re: Algoritmos números primos em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/04/2015 - 11:30h

EnzoFerber escreveu:

Boa noite, amigo.

if (count == 2)... Aqui está o problema. Se o primeiro número que você testar não for um primo e tiver mais de 2 divisores, já ferrou com seu algoritmo.

O problema? Você não reseta o contador a cada iteração do loop. Tenta colocar um "count = 0;" no final do loop... (Depois do incremento da lista encadeada)

Tenta usar uma função com uma performance *um pouco* melhor para achar os números primos. Algo assim:

int prime (int n)
{
register int i;

for (i = 2; i * i < n + 1; i++ )
if ( n % i == 0 ) return 0;

// it is prime
return 1;
}


[]'s




Muito obrigado cara, o algoritmo deu certo, e quanto a performance vou arrumar isso, valeu !!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts