import static  java.lang.System.*;

/**
  * Classe 'nbParfait' :  Calcul des nombres entiers dits PARFAITS
  * @author   (c) ~/2A env.  H. Nguyen-Phu
  * @since    1.0   2005.10.18
  * @version  1.2   2006.11.15  22h44
  * @see      nbParfait_
  */

public class  nbParfait  {

/** seuilMin :  seuil minimal de la recherche  de type ENTIER  LONG 
  *             Hypo.: seuilMin < seuilMax    
  */
	private long  seuilMin;

/** seuilMax :  seuil maximal de la recherche  doit être positif et de type ENTIER  LONG  */
	private long  seuilMax;

/** nbParfait : constructeur à  deux arguments 
  * @param  seuilMin  Valeur du seuil minimal  de type  ENTIER  LONG
  * @param  max       Valeur du seuil maximal  de type  ENTIER  LONG
  */
	public  nbParfait(long seuilMin, long max )  {// constructeur publique à 2 arguments
		this.seuilMin = seuilMin; // emploi obligatoire de 'this'
		seuilMax = max;   // pas d'emploi de 'this' car 'max' est différent de 'seuilMax'.
	}

/**  rechParfait( ) : procédure publique d'instance pour calculer les nombres parfaits entre deux seuils
  */
	public void  rechParfait()   {
		for (long i= seuilMax; i >= seuilMin; i--)
			if ( estParfait(i) )
			        out.println(i+" est un nombre parfait.");
	}

/**  estParfait( ) : fct. privée d'instance pour déterminer si un nombre est  parfait
  *  @param  N       Valeur du nombre de type  ENTIER  LONG
  *  @return         un booléen
  */
	private boolean estParfait(long N)   {
		boolean tmp = false;
		long   sommediv=0;
		for(long j=1; j<= N/2 ; j++)
 		   if (N%j==0)
			sommediv += j;   // affectation composée
		if (sommediv==N)
			tmp = true;
		return  tmp;		
	}


}
