ciao ragazzi ho un problemino riguardo l'implementazione di un "setaccio" per numeri primi.
ecco il codice:

codice:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void CrivelloDiEratostene(int LimiteInferiore, int LimiteSuperiore)
        {
            ArrayList Crivello = new ArrayList(LimiteSuperiore - (LimiteInferiore-1));

            /*Inserisce i valori dell'intervallo immesso all'interno dell'ArrayList*/
            LimiteInferiore = Int32.Parse(textBox1.Text);
            for (int i = 0; i < Crivello.Capacity; i++)
            {
                Crivello.Add(LimiteInferiore);
                LimiteInferiore++;
            }

            textBox1.Text = null;
            textBox2.Text = null;

            /*Elimina 0 e 1 dalla lista*/

                if ((int)Crivello[0] == 1)
                    Crivello.RemoveAt(0);
                if ((int)Crivello[0] == 0 && (int)Crivello[1] == 1)
                {
                    Crivello.RemoveAt(0);
                    Crivello.RemoveAt(0);
                }

                for (int i = 0; i < Crivello.Count; i++)
                {
                    for (int j = 1; j < Crivello.Count; j++)
                    {
                        if ((int)Crivello[i] % (int)Crivello[j] > 0)
                            Crivello.RemoveAt(j);
                    }
                }

            /*Stampa il contenuto dell'ArrayList su un file txt*/
            const string FileName = "Elenco_Numeri_Primi.txt";
            using (StreamWriter sw = File.CreateText(FileName))
            {
                sw.WriteLine("Elenco Numeri Primi");
                sw.WriteLine();
                for (int i = 0; i < Crivello.Count; i++)
                {
                    sw.WriteLine(Crivello[i]);
                }
                sw.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CrivelloDiEratostene(Int32.Parse(textBox1.Text), Int32.Parse(textBox2.Text));
        }
    }
}
Il problema è nei due for nidificati, dove in teoria dovrei controllare i multipli del primo elemento dell'array ed eliminarli e così via.
ad esempio, se come intervallo inserisco 2 e 6 mi stampa sul file txt solamente 2 e 4... quando in realtà dovrebbe stamparmi 2 3 5.
Penso che il problema riguardi proprio la rimozione dell'indice dell'array, in quanto ogni volta viene ricompattato e quindi con gli indici dei for prefissati in quel modo lo scorro in modo errato... potreste consigliarmi un metodo migliore per farlo o come correggere questo mio errore?