Comment fonctionne-t-il ?
Ceci est un début d'implémentation en langage C, fonctionnant lorsque le nombre est premier. Il sera facilement transposable en tout autre langage (BASIC, Java, PowerBuilder, Oracle, Mapple, MathLab, etc.).
Il permet d'obtenir la longueur de la période du Premier considéré, et de déterminer si celle-ci est unique.
long
of_getperiode(long pl_premier, long pl_base)
{
static
long ll_Periode;
long
ll_Dividende;
long
ll_Quotient;
long
ll_Reste;
long
ll_PremReste;
long
ll_Ret;
ll_Periode
= 0L;
ll_Dividende = 1L; le
nombre est censé être premier, on cherche si la période
est unique, fixons le numérateur à 1, cela nous suffira pour le
savoir. Si la longueur de la période est égale à p-1, celle-ci
sera unique.
ll_Quotient = 0L;
ll_Ret = pl_base%pl_premier les congruences permettent de calculer pour la plus petite base de forme B+KN
if
(ll_Ret==0L) Si la base divise
le premier, la longueur de la période est nulle
return 0L;
if
(ll_Ret==1L) On se permet de calculer
en base 1+KN
pl_base = pl_base + pl_premier;
do On
boucle sur l'algoritme d'Euclide (enfin, une traduction, il n'a pas eu le temps
de le coder en C:-)
{
ll_Reste
= ll_Dividende - ll_Quotient * pl_premier;
ll_Dividende
= ll_Reste * pl_base;
ll_Quotient
= long(ll_Dividende/ pl_premier);
if (ll_Periode
== 0L) Cette ligne sert juste à
attrapper le premier reste
ll_PremReste
= ll_Reste;
ll_Periode++;
En incrémentant la période
}
while (ll_Periode == 1L || ll_Reste != ll_PremReste); Fin
dès que l'on retrouve le premier reste
On
est sorti en retrouvant le premier reste, il faut retirer 1 à la longueur
de la période
return --ll_Periode;
}