code_getperiode
Le microscope numérique

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;
}