|
HOME |
FORUM |
INDICE |
ContenitoreNumeri.java
|
/*
Classe che determina i Numeri Primi in base all'algoritmo di Eratostene.
Fornisce inoltre un metodo statico per il calcolo del fattoriale e della serie di Fibonacci.
Autore: Agosto 2009, Giovanni Iacobelli - http://www.iacosoft.com
*/
class ContenitoreNumeri
{
int limite= 0;
int Num[];
boolean Primi[];
boolean Calcolo= false;
//costruttore
public ContenitoreNumeri(int max)
{
//inizializza i vettori
Num= new int[max];
Primi= new boolean[max];
for(int x= 0; x < max; x++)
{
Num[x]= x+1;
Primi[x]= true;
}
limite= max;
}
//determina i numeri primi
public void CalcolaValoriPrimi()
{
/*
l'algoritmo consiste nell'escludere tutti i multipli
dei numeri (da 2 fino al limite massimo impostato)
*/
for(int x= 1; x < limite; x++)
{
if (Primi[x])
{
for(int y= 2; (y * Num[x] ) <= limite; y++)
{
Primi[(y * Num[x]) -1] = false;
}
}
}
Calcolo= true;
}
/*
restituisce il conteggio dei numeri primi trovati
*/
public int CountNumeriPrimi()
{
if (!Calcolo)
{
CalcolaValoriPrimi();
}
int tot= 0;
for(int x= 0; x < limite; x++)
{
if (Primi[x])
{
tot++;
}
}
return tot;
}
/*
restituisce un array di int contenente i numeri primi
determinati dall'elaborazione
*/
public int[] GetNumeriPrimi()
{
int tot= CountNumeriPrimi();
int[] ris= new int[tot];
int ind= 0;
for(int x= 0; x < limite; x++)
{
if (Primi[x])
{
//System.out.println(Num[x]);
ris[ind++]= Num[x];
}
}
return ris;
}
//restituisce il fattoriale di un numero
public static int GetFattoriale(int num)
{
if (num > 0)
{
//usa la ricorsione
return num * GetFattoriale(num-1);
}
return 1;
}
//ritorna una array di dimensione num contenente la serie di Fibonacci
public static int[] GetSerieFibonacci(int num)
throws ArgomentoNonValido
{
/*
la serie di Fibonacci è una serie numerica dove i numeri sono
dati dalla sommatoria dei due numeri precedenti:
1 1 2 3 5 8 ..
*/
int[] ris= new int[num];
if (num > 1)
{
ris[0]=1;
ris[1]=1;
for(int x= 2; x < num; x++)
{
ris[x]= ris[x-1] + ris[x-2];
}
} else
throw new ArgomentoNonValido(); //genera l'eccezione personalizzata
return ris;
}
}
|
|