/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E S P R E M I E R S E L E M E N T S */
/* D ' U N E S U I T E A L E A T O I R E T Y P E ' BBS ' : */
/* */
/* */
/* Author of '$xci/valeurs_BBS$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20131224105835). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_MINI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
#define X0 \
TROIS \
/* Definition du premier element de la suite 'X(n)'... */
#define NOMBRE_PREMIER_P \
PARE(43991)
#define NOMBRE_PREMIER_Q \
PARE(44027)
/* Definition des parametres premiers. */
#include xci/valeurs.01.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/valeurs.02.I"
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D E S P R E M I E R S E L E M E N T S */
/* D ' U N E S U I T E A L E A T O I R E T Y P E ' BBS ' : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
/* Numero de la premiere image, */
DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
/* Numero de la derniere image. */
DEFV(Int,INIT(numero_d_image,UNDEF));
/* Numero de l'image courante. */
DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
/* Pas de passage d'un numero d'image a une autre. */
DEFV(Int,INIT(Xn,X0));
/* Definition du premier element de la suite 'X(n)'... */
DEFV(Int,INIT(nombre_premier_P,NOMBRE_PREMIER_P));
DEFV(Int,INIT(nombre_premier_Q,NOMBRE_PREMIER_Q));
/* Definition des parametres premiers. */
#include xci/valeurs.03.I"
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_I("premiere=""p=""D=",premiere_image);
GET_ARGUMENT_I("derniere=""d=""A=",derniere_image);
GET_ARGUMENT_I("pas=",pas_des_images);
GET_ARGUMENT_I("Xn=""xn=""X0=""x0=",Xn);
/* Parametres completes le 20140106155614 par "X0=" et "x0="... */
GET_ARGUMENT_I("npP=""P=",nombre_premier_P);
GET_ARGUMENT_I("npQ=""Q=",nombre_premier_Q);
PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
)
);
Test(IFLE(premiere_image,derniere_image))
Bblock
DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
Bblock
DEFV(Int,INIT(element_aleatoire_courant,MASQUE_VIDE));
Repe(NBITHX)
Bblock
EGAL(Xn,REST(EXP2(Xn),MUL2(nombre_premier_P,nombre_premier_Q)));
EGAL(element_aleatoire_courant,OUIN(SLLS(element_aleatoire_courant,UN),ETLO(Xn,MASK2)));
/* Il s'agit du generateur BBS ("Blum-Blum-Shub"). Il utilise deux nombres premiers P et */
/* Q, ainsi qu'une graine G tels que : */
/* */
/* P = 3 modulo 4 */
/* Q = 3 modulo 4 */
/* */
/* G E [2,(PxQ)-1)] */
/* */
/* Il est defini par l'iteration : */
/* */
/* X(0) = G */
/* */
/* 2 */
/* X(n+1) = X(n) modulo (PxQ) */
/* */
/* Le bit de poids le plus faible de X(n+1) est un bon bit pseudo-aleatoire... */
/* */
/* De plus P et Q doivent etre les plus grands possibles, mais tel que (PxQ)x(PxQ) tienne */
/* sur 63 bits (a cause de l'elevation au carre de X(i) afin d'eviter des debordements...). */
Eblock
ERep
CAL2(Prin1("%x\n",element_aleatoire_courant))
Eblock
EDoI
Eblock
ATes
Bblock
PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee");
Eblock
ETes
RETU_Commande;
Eblock
ECommande