Test de MillerRabin

maitrejediyass Messages postés 5 Date d'inscription mardi 14 décembre 2010 Statut Membre Dernière intervention 22 avril 2012 - 22 avril 2012 à 10:46
 Utilisateur anonyme - 5 mai 2012 à 00:40
Bonjour, j'ai une boucle infini au niveau du while , quelqu'un pourrait m'aider à debbugger mon programme

import java.math.*;
import java.util.*;

public class MillerRabin
{
    
    
    public static void millerRabin(long n, int t)
    {
        int j;
        long b;
        long r; 
        long a;
        long y;
        b=calculDeB(n);
        long resultat=(long)Math.pow(2,b);
        r=(n-1)/resultat;
        
        for (int i=0;i<t;i++){
            a=random(n);
            y=modpow(a,r,n);
            if (y!=1 && y!=(n-1))
            {
              j=1;
              
             /* ici commence la boucle infini */
             while(j 0) {
                if ((exp&1)>0) result = (result * x) % mod;
                exp >>= 1;
                x = (x * x) % mod;
            }

            return result;
        }
    }
    
}

3 réponses

Utilisateur anonyme
22 avril 2012 à 13:50
Une boucle infinie au niveau du while je veux bien, mais ça serait mieux si tu nous précisais lequel, car tu en as 3 dans ton code.

--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
maitrejediyass Messages postés 5 Date d'inscription mardi 14 décembre 2010 Statut Membre Dernière intervention 22 avril 2012
22 avril 2012 à 16:35
c'est au niveau de la boucle while

while(j<b && y!=(n-1)){
                  y=modpow(y,2,n);
                  if(y==1){
                    System.out.println("Non premier");
                    j++;
                    }
                  
                    if (y!=(n-1)){
                   System.out.println("Non premier");
0
Utilisateur anonyme
5 mai 2012 à 00:40
C'est ta condition qui est mal faite.

j tu ne changes jamais la valeur de <italique>j ou de b donc pas de chance, dans ton code j et toujours strictement inférieur à b

y!=(n-1) --> es-tu sûr que ta boucle est infinie ? Car ici n-1 ne change jamais, et donc tu as très peu de chance d'avoir y à la même valeur que n-1.

Peux-tu vérifier si ta fonction modPow renvoie des résultats cohérents ? Est-ce que tu as des messages affichés dans ta console ?

--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
Rejoignez-nous