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?