ah, poi j va inizializzato a i+1 non ad 1, infine il modulo deve essere = 0 per potere cancellare un elemento (non > 0) e il modulo va invertito, non è un operazione commutativa... a%b != b%a, infine una volta che l'elemento i-esimo ^2 > elemento maggiore non vale la pena continuare a iterare , infatti se ho un numero a che è il numero piu alto della lista, se questo non è primo deve essere, come minimo, formato dal prodotto di due numeri primi, una qualche composizione di p*q , ora siccome tutti i multipli dei numeri primi minori dell'elemento i-esimo sono stati eliminati il minimo valore di p e q deve essere elemento[i] , quindi una volta che il crivello ha raggiunto la radice quadra dell'elemento massimo il suo lavoro è finito, con questa semplice ottimizzazione il loop piu esterno (i) nel caso del calcolo tra 1 e 10000 esegue 25 volte invece di 10mila.
codice:for (int i = 0; i < Crivello.Count && (int)Crivello[i] * (int)Crivello[i] < (int)Crivello[Crivello.Count -1]; i++) { for (int j = i+1; j < Crivello.Count; j++) { if ((int)Crivello[j] % (int)Crivello[i] == 0) Crivello.RemoveAt(j--); } }

Rispondi quotando