[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Programa para achar nºs primos ...



Isso é muito simples.
Claro que quanto mais primos você quiser mais tempo vai demorar para rodar, porque como foi mencionado, eles ficam mais esparsos.
Coloque no MAX_PRIMOS o número de primos que você quer achar, este programa vai começar do 2.

A idéia é a seguinte:
2 é primo. Cria uma caixinha com o número 2.
Os próximos números vão tentar passar pela caixinha, mas só vão conseguir aqueles que não forem divisíveis por 2.
O 3 passa. Como só tinha uma caixinha, ele passou por todas as caixinhas então ele é primo. Cria uma caixinha para ele. Você vai
criando uma fila de caixinhas.
Os números vão passando pela fila, e quando eles passam por algum número que eles são divisíveis, eles param. Quem consegue passar
pela fila inteira é porque não era divisível por ninguém, ou seja, é primo. E aí ele ganha uma caixinha nova também...

Não sei se expliquei direito. Aí vai o código:
Ele coloca os números primos no vetor "primos".

***********************************************************

#define MAX_PRIMOS 100000

int primos[MAX_PRIMOS];
int nprimos;
primos[0] = 2;
nprimos = 1;
int i = 3;
int n,j;
do
{
  n = i;
  for (j=0;j<nprimos;j++)
     while (n%primos[j] == 0)
       n /= primos[j];
  if (n != 1)
  {
    primos[nprimos] = n;
    nprimos ++;
  }
  i+=2;
} while (nprimos < MAX_PRIMOS);