Ho usato il crivello di Eratostene, ma so che ci sono altri metodi molto più performanti.
Se volete contribuire mi piacerebbe vedere qualche algoritmo più intelligente.
Codice: Seleziona tutto
//trova i numeri primi da 0 a max_value:
var max_value = 100000;
//crivello di Eratostene:
primi = ds_list_create();
for(var i = 2 ; i < max_value ; i++) {
ds_list_add(primi, i);
}
var t = ds_list_size(primi);
var c = 0;
for(var j = sqrt(t)/logn(11,t); j > 0; j--){
for(var i = 0; i < t; i++){
if((primi[| i] != primi[| c])&&(primi[| i] % primi[| c] == 0)){
ds_list_delete(primi, i);
t--;
}
}
c++;
}
show_debug_message("N primi trovati: "+ string(ds_list_size(primi)));
Codice: Seleziona tutto
sqrt(t)/logn(11,t)
ho approssimato usando il logaritmo su base 11 di x , vi sembrerà incredibile, ma funziona benissimo come sostituto di Li(x) magari facendo cose a casaccio, senza volerlo ho scoperto una nuova proprietà dei numeri primi che mi farà diventare ricco e famoso.
ciao e a presto!