Programa em C para encontrar números primos em um intervalo

Iniciado por rggoulart, 05 de Novembro de 2013, 16:08

tópico anterior - próximo tópico

rggoulart

Boa tarde pessoal, tudo bem?
Sou novato tanto aqui no fórum como no ambiente unix e estou começando a aprender a programar em C agora.
Então peço por gentileza que desconsiderem qualquer erro infantil e que se possível me ajudem.

Antes de criar esse tópico, pesquisei e não encontrei nada a respeito que pudesse me ajudar.

É o seguinte. Eu preciso fazer um programa descobrir a quantidade de números primos existentes entre um certo intervalo de tempo. Esse intervalo de tempo, precisa ser uma variável (eu vou precisar escolher o intervalo cada vez que rodar o programa).
Além disso, eu preciso paralelizar esses processos (o número de processos precisa ser uma variável também, cada vez q for rodar vou optar por resolver  com X processos).

A princípio pensei em fazer uma busca de números primos comuns e com algumas ajudas, cheguei a mais ou menos isso aqui:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int ehprimo(long int n);

int main(int argc, char ** argv)
{
long int i;
long int cp=0;
long int inf=atoi(argv[1]);
long int sup=atoi(argv[2]);
for (i=inf; i<=sup; i++)
if (ehprimo(i))
{
cp++;
#ifdef DEBUG
printf("%ld, ",i);
#endif
}
printf("\nCount=%ld\n",cp);
return 0;
}

int ehprimo(long int n)
{
int primo = 1;
long int i;
for (i=2;i<sqrt(n+1);i++)
{
if ((n%i)==0)
{
primo=0;
break;
}
}
return primo;



Mas não sei como fazer para paralelizar isso. Eu sei um pouco da parte teórica que eu teria que compartilhar memória e tal... Mas não sei implementar. Também estou na dúvida se utilizo forks().

Alguém pode dar uma luz?

rlcastrobh

CitarAlém disso, eu preciso paralelizar esses processos (o número de processos precisa ser uma variável também, cada vez q for rodar vou optar por resolver  com X processos).

O que você quer dizer com isso poderia me dar um exemplo?
Qual algoritmo você usou para achar os números primos? Não estudei C e fiquei confuso com a lógica.