Class EPA

java.lang.Object
  |
  +--EPA

public class EPA
extends Object

Entier naturel (positif) de Précision Arbitraire.
Cette classe fournit des méthodes analogues à la plupart des opérateurs primitifs sur les entiers, ainsi que des méthodes telles que la division euclidienne, la puissance et l'inversion modulaire, le calcul de PGCD, le test de primalité probabilistique, ...
En interne, la valeur est représentée sous sa décomposition dans la base BASE, soit une séquence d'entiers n tels que 0 ≤ n < BASE, avec les nombres de poids faibles en premier. Par exemple, en base 100, 78953 serait représenté par la séquence (53,89,7).
Une fois créés, les EPA sont immutables.


Field Summary
private static int BASE
          La base dans laquelle la valeur est décomposée; est égal à 10NBR_DIGIT_BASE.
static EPA DEUX
          L'EPA constant de valeur 2.
private static int NBR_DIGIT_BASE
          Nombre de fois que BASE peut être divisée par 10 : BASE=10NBR_DIGIT_BASE.
static EPA UN
          L'EPA constant de valeur 1.
private  int[] val
          Décomposition, en base BASE de la valeur de cet EPA.
static EPA ZÉRO
          L'EPA constant de valeur 0.
 
Constructor Summary
private EPA()
          Construit un EPA vide.
  EPA(byte[] tByte)
          Construit l'EPA correspondant à la série de bytes spécifiée.
  EPA(EPA n)
          Construit un EPA à partir de l'EPA spécifié (constructeur de copie).
  EPA(int n)
          Construit l'EPA correspondant à l'entier naturel spécifié.
private EPA(int[] valeurs)
          Construit l'EPA correspondant à la décomposition spécifiée.
  EPA(String chaîne)
          Construit l'EPA correspondant à la chaîne de caractères spécifiée.
 
Method Summary
 int compareTo(EPA n)
          Compare cet EPA avec un autre.
static EPA créerAléatoirement(int nbdigits)
          Retourne un EPA de nbdigits chiffres (en base 10) engendré aléatoirement.
static EPA créerAléatoirementPremier(int nbdigits, int marge)
          Retourne un EPA premier de nbdigits digits (en base 10) engendré aléatoirement.
 EPA décale(int décalage)
          Retourne le produit par BASEdécalage, par exemple 78953 décalé de 2 si la BASE est 100 devient 78953*100*100=789530000.
 EPA diviséPar(int diviseur)
          Retourne le résultat de la division de cet EPA par par un int.
 boolean estDifférentDeDeux()
          Indique si cet EPA est différent de 2.
 boolean estDifférentDeUn()
          Indique si cet EPA est différent de 1.
 boolean estÉgalÀ1()
          Indique si cet EPA est égal à 1.
 boolean estÉgalÀDeux()
          Indique si cet EPA est égal à 2.
 boolean estImpair()
          Indique si cet EPA est impair.
 boolean estNonNul()
          Indique si cet EPA est non-nul.
 boolean estNul()
          Indique si cet EPA est nul.
 boolean estPair()
          Indique si cet EPA est pair
 boolean estProbablementPremier(int marge)
          Indique si cet EPA est premier selon l'algorithme de Miller/Rabin, soit avec certain taux de confiance (algorithme de type "Monte-Carlo" positif).
 int getNbrCoefficients()
          Renvoie le nombre de chiffres de l'EPA, en base BASE.
 int getNbrDigit()
          Renvoie le nombre de chiffres de cet EPA, en base 10.
(package private)  EPA inverseModulo(EPA module)
          Renvoie l'inverse de cet EPA modulo module, selon l'algo d'Euclide étendu.
 EPA modulo(EPA diviseur)
          Retourne le modulo (reste) de cet EPA par diviseur.
 int modulo(int diviseur)
          Calcule le modulo de cet EPA par un int
 EPA moins(EPA terme)
          Renvoie le résultat de la soustraction du terme spécifié à cet EPA.
 EPA multipliéPar(EPA facteur)
          Renvoie le résultat de la multiplication de cet EPA par facteur.
 EPA multipliéPar(int facteur)
          Renvoie le résultat de la multiplication de cet EPA par un int.
 EPA pgcd(EPA n)
          Renvoie le Plus Grand Commun Diviseur de cet EPA et n.
 EPA plus(EPA terme)
          Renvoie le résultat de l'addition de cet EPA et du terme spécifié.
 EPA puissance(EPA exposant)
          Renvoie le résultat de l'élevation de cet EPA à la puissance exposant (un EPA).
 EPA puissance(int exposant)
          Renvoie le résultat de l'élevation de cet EPA à la puissance exposant (un int).
 EPA puissanceModulo(EPA exposant, EPA mod)
          Renvoie l'élevation de cet EPA à la puissance exposant modulo mod.
 EPA quotient(EPA diviseur)
          Retourne le quotient de la division entière de cet EPA par diviseur.
 EPA[] quotientReste(EPA diviseur)
          Retourne un tableau de deux EPA, respectivement le quotient et le reste de la division entière de cet EPA et de diviseur.
 EPA reste(EPA diviseur)
          Retourne le reste de la division entière de cet EPA par diviseur.
 byte[] toByteArray()
          Convertit cet EPA en un tableau de bytes.
 String toString()
          Renvoie la chaîne de caractères correspondant à la représentation de sa valeur en base 10.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
 

Field Detail

ZÉRO

public static final EPA ZÉRO
L'EPA constant de valeur 0.

UN

public static final EPA UN
L'EPA constant de valeur 1.

DEUX

public static final EPA DEUX
L'EPA constant de valeur 2.

NBR_DIGIT_BASE

private static final int NBR_DIGIT_BASE
Nombre de fois que BASE peut être divisée par 10 : BASE=10NBR_DIGIT_BASE.

BASE

private static final int BASE
La base dans laquelle la valeur est décomposée; est égal à 10NBR_DIGIT_BASE.

val

private int[] val
Décomposition, en base BASE de la valeur de cet EPA.
Constructor Detail

EPA

private EPA()
Construit un EPA vide.
Ce constructeur est privé car résérvé à une utilisation interne, l'EPA ainsi construit n'étant pas encore cohérent.

EPA

private EPA(int[] valeurs)
     throws IllegalArgumentException
Construit l'EPA correspondant à la décomposition spécifiée.
Il peut y avoir des coefficients plus grand que BASE: ce constructeur se charge de les normaliser. Aucun coefficient ne peut être négatif.
Parameters:
valeurs - Tableau d'int codant un EPA en base BASE.
Throws:
IllegalArgumentException - Lorsqu'un des coefficients est négatif.

EPA

public EPA(String chaîne)
    throws NumberFormatException
Construit l'EPA correspondant à la chaîne de caractères spécifiée.
Parameters:
chaîne - La représentation en base 10 de la valeur de l'EPA à construire.
Throws:
NumberFormatException - Si la chaîne n'est pas exclusivent composée de chiffres de 0 à 9.

EPA

public EPA(int n)
    throws IllegalArgumentException
Construit l'EPA correspondant à l'entier naturel spécifié.
Parameters:
n - L'int dont on veut l'EPA correspondant.
Throws:
IllegalArgumentException - Lorsque n < 0.

EPA

public EPA(EPA n)
Construit un EPA à partir de l'EPA spécifié (constructeur de copie).
Parameters:
n - L'EPA dont on veut la copie conforme.

EPA

public EPA(byte[] tByte)
Construit l'EPA correspondant à la série de bytes spécifiée.
Pour obtenir des valeurs començant à 0, on enlève à chaque valeur Byte.MIN_VALUE.
Parameters:
tByte - Valeurs des coefficients.
Method Detail

getNbrDigit

public int getNbrDigit()
Renvoie le nombre de chiffres de cet EPA, en base 10.

getNbrCoefficients

public int getNbrCoefficients()
Renvoie le nombre de chiffres de l'EPA, en base BASE.

estPair

public boolean estPair()
Indique si cet EPA est pair

estImpair

public boolean estImpair()
Indique si cet EPA est impair.

estNonNul

public boolean estNonNul()
Indique si cet EPA est non-nul.

estNul

public boolean estNul()
Indique si cet EPA est nul.

estÉgalÀ1

public boolean estÉgalÀ1()
Indique si cet EPA est égal à 1.

estDifférentDeUn

public boolean estDifférentDeUn()
Indique si cet EPA est différent de 1.

estÉgalÀDeux

public boolean estÉgalÀDeux()
Indique si cet EPA est égal à 2.

estDifférentDeDeux

public boolean estDifférentDeDeux()
Indique si cet EPA est différent de 2.

plus

public EPA plus(EPA terme)
Renvoie le résultat de l'addition de cet EPA et du terme spécifié.
Parameters:
terme - EPA avec lequel on souhaite effectuer l'addition

moins

public EPA moins(EPA terme)
          throws IllegalArgumentException
Renvoie le résultat de la soustraction du terme spécifié à cet EPA.
Parameters:
terme - EPA que l'on souhaite soustraire à cet EPA
Throws:
IllegalArgumentException - Si terme est supérieur à cet EPA.

décale

public EPA décale(int décalage)
Retourne le produit par BASEdécalage, par exemple 78953 décalé de 2 si la BASE est 100 devient 78953*100*100=789530000.
Parameters:
décalage - Le décalage souhaité.

compareTo

public int compareTo(EPA n)
Compare cet EPA avec un autre.
Returns:
-1 Si this < n
0 Si this == n
1 Si this > n

toByteArray

public byte[] toByteArray()
Convertit cet EPA en un tableau de bytes.
Toutes les valeurs doivent être comprises entre 0 et 255, sinon le contructeur avec un paramètre byte[] ne redonne pas la même valeur.
Returns:
Les coefficients décalés de Byte.MIN_VALUE puis transtypés en byte.

toString

public String toString()
Renvoie la chaîne de caractères correspondant à la représentation de sa valeur en base 10.
Overrides:
toString in class Object

multipliéPar

public EPA multipliéPar(int facteur)
                 throws IllegalArgumentException
Renvoie le résultat de la multiplication de cet EPA par un int.
Throws:
IllegalArgumentException - Si facteur < 0

multipliéPar

public EPA multipliéPar(EPA facteur)
Renvoie le résultat de la multiplication de cet EPA par facteur.

diviséPar

public EPA diviséPar(int diviseur)
              throws IllegalArgumentException
Retourne le résultat de la division de cet EPA par par un int.
Throws:
IllegalArgumentException - Si diviseur ≤ 0

modulo

public int modulo(int diviseur)
           throws IllegalArgumentException
Calcule le modulo de cet EPA par un int
Throws:
IllegalArgumentException - Si diviseur ≤ 0

quotient

public EPA quotient(EPA diviseur)
Retourne le quotient de la division entière de cet EPA par diviseur.

reste

public EPA reste(EPA diviseur)
Retourne le reste de la division entière de cet EPA par diviseur.

modulo

public EPA modulo(EPA diviseur)
Retourne le modulo (reste) de cet EPA par diviseur.

quotientReste

public EPA[] quotientReste(EPA diviseur)
Retourne un tableau de deux EPA, respectivement le quotient et le reste de la division entière de cet EPA et de diviseur.

puissance

public EPA puissance(int exposant)
              throws IllegalArgumentException
Renvoie le résultat de l'élevation de cet EPA à la puissance exposant (un int).
Throws:
IllegalArgumentException - Si exposant < 0

puissance

public EPA puissance(EPA exposant)
Renvoie le résultat de l'élevation de cet EPA à la puissance exposant (un EPA).

puissanceModulo

public EPA puissanceModulo(EPA exposant,
                           EPA mod)
Renvoie l'élevation de cet EPA à la puissance exposant modulo mod.

pgcd

public EPA pgcd(EPA n)
Renvoie le Plus Grand Commun Diviseur de cet EPA et n.

estProbablementPremier

public boolean estProbablementPremier(int marge)
Indique si cet EPA est premier selon l'algorithme de Miller/Rabin, soit avec certain taux de confiance (algorithme de type "Monte-Carlo" positif).
L'algorithme mis en oeuvre reconnait correctement les nombres décomposables en tant que tels, mais si le nombre n'est pas premier, la probabilité qu'il soit déclaré premier par erreur est de l'ordrde de 2-marge.
Référence: Cryptographie, théorie et pratique, Douglas Stinson, Int. Thompson Pub., p 121.
Parameters:
marge - Le degré de sûreté souhaité.
Returns:
false Si l'on est sûr que ce n'est pas un nombre premier.
true Si le nombre semble premier.

inverseModulo

final EPA inverseModulo(EPA module)
                 throws ArithmeticException
Renvoie l'inverse de cet EPA modulo module, selon l'algo d'Euclide étendu.
Référence: Cryptographie, théorie et pratique, Douglas Stinson, Int. Thompson Pub., p 105.
Throws:
ArithmeticException - Si l'EPA n'est pas inversible.

créerAléatoirement

public static EPA créerAléatoirement(int nbdigits)
Retourne un EPA de nbdigits chiffres (en base 10) engendré aléatoirement.
Parameters:
nbdigits - Le nombre de digits voulus.

créerAléatoirementPremier

public static EPA créerAléatoirementPremier(int nbdigits,
                                            int marge)
Retourne un EPA premier de nbdigits digits (en base 10) engendré aléatoirement.
Parameters:
nbdigits - Le nombre de digits de l'EPA à créer (en base 10).
marge - La marge d'erreur du test de primalité (cf. estProbablementPremier)