Crivo de Eratóstenes Simples em C
Publicado por Perfil removido (última atualização em 14/05/2012)
[ Hits: 10.580 ]
Crivo simples. Valores devem ser ajustados.
Obs[1]: Dependendo do compilador, sistema ou memória disponível, corrigir para não haver overflows.
Obs[2]: O tamanho do crivo pode ser calculado exato e quase exato, dependendo do limite colocado.
Obs[3]: Quem puder testar e fazer "benchmark" com valores elevados e sistemas mínimos, máquinas virtuais etc. eu agradeceria.
#include <stdio.h>
#include <math.h>
typedef unsigned long long llint;
int main (void) {
const llint p = (llint) (pow (2.0, 23.0) -1.0);
const llint q = 1009999; // (llint) (2.0 * ((double) p / log((double) p)));
llint primes[q];
llint i=5, j=0, k=0, l=1, m=0;
for (m=0; m<q; m++) primes[m]=1;
primes[0]=2;
primes[1]=3;
do {
j = 0;
k= (llint) sqrt((double) i);
while ((primes[++j]<k) && (i%primes[j]));
if (primes[j]>k) primes[++l] = i;
i+=((i%3==2)?2:4);
} while (i<p && l<q);
for (m=0; m<l; m++) printf ("%llu ",primes[m]);
putc ('\n',stdout);
return 0;
}
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (7)
De volta para o futuro - ou melhor, para o presente (parte 2) (0)









