In quanti modi riusciamo a scrivere il crivello di Eratostene?
Dino Del Favero
dino@mesina.net
Lun 1 Nov 2010 21:14:06 CET
On Mon, Nov 01, 2010 at 06:27:22PM +0100, Gianluca Moro wrote:
> ; Processo 1: produci il numero successivo (n->n+1)
> ; Processo 2: prendi il numero prodotto da processo 1, se e' multiplo di 2
> ; eliminalo, altrimenti e' il prossimo numero primo
> ; Processo 3: prendi il numero prodotto da processo 2, se e' multiplo di 3
> ; eliminalo, altrimenti e' il prossimo numero primo
> ;
Ciao,
prendendo spunto dal metodo esposto da Gianluca ho implementato la ricorsione
in C, il concetto non � lo stesso, ma molto simile (elimino il numero se �
multiplo di un precedente)
dino@vanessa:~/BLUG>cat crivello_ric.c
#include <stdio.h>
int primo(int *num, int *primoprec)
{
if ((*num <= 2) || (*primoprec == 1))
return 1;
if ((*num % *primoprec) == 0)
return 0;
return (primo(num, --primoprec));
}
main (int argc, char **argv)
{
if (argc == 1)
printf("Uso: %s [limite_superiore]\n", argv[0]);
else {
int limite = atoi(argv[1]);
int setaccio[limite], i, j;
setaccio[0] = 1;
setaccio[1] = 2;
setaccio[2] = 3;
for(i=2; setaccio[i] <= limite; )
{
if (primo(&(setaccio[i]), &(setaccio[i-1])))
{
setaccio[i+1] = setaccio[i] + 1;
i++;
}
else
setaccio[i]++;
}
for(j = 1; j < i; j++)
printf("%d\n", setaccio[j]);
}
}
dino@vanessa:~/BLUG>./crivello_ric 100
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
dino@vanessa:~/BLUG>
Nulla di che, il C permette di giocare con i puntatori e a me piace :)
La cosa che vorrei far notare � che questo codice � molto molto meno
performante di quello che avevo postato in precedenza!
dino@vanessa:~/BLUG>time ./crivello 100000
...
99971
99989
99991
real 0m0.374s
user 0m0.012s
sys 0m0.028s
dino@vanessa:~/BLUG>time ./crivello_ric 100000
...
99971
99989
99991
real 0m23.034s
user 0m20.905s
sys 0m0.112s
dino@vanessa:~/BLUG>
Nessun'altro ci prova? magari con altri linguaggi?
Saluti
Dino
--
We cannot direct the wind, but we can adjust the sails.
Non possiamo dirigere il vento, ma possiamo regolare le vele.
Maggiori informazioni sulla lista
blug