Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    [Débutante] Résolution de : x_(n 1)=(a*x_n b) mod m
    Bonjour voici mon prb c'est que je ne sais pas comment résoudre ça x_(n+1)=(a*x_n+b) mod m en prolog (mais j'ai fais le modulo) de plus les valeurs à remplacer pour vérifier sont m=2^31-1,a=2^7,b=0 et car je suis vraiment coincée aider moi svp merci d'avance .

  2. #2
    Rédacteur/Modérateur

    Bonjour
    Plutôt que de te donner un code direct, réfléchis à cette implémentation du calcul des nombres de fibonacci
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    /* cas de base 
    fibonacci(0) = 1
    fibonacci(1) = 1
    */
    naive_fib(X, X) :- X < 2, !.
     
    /* cas general
    fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
     
    Y = fibonacci(X)
    */
     
    naive_fib(X, Y) :-
      Idx1 is X - 1,
      Idx2 is X - 2,
      naive_fib(Idx1, A),
      naive_fib(Idx2, B),
      Y is A + B.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre du Club
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    x(N,A,B,M,R):- N>1 ,Y is  N-1, x(Y,A,B,M,R), R is (A*Y+B)mod M .

    j'ai fait cette solution est ça dit dons le logiciel SWi-prolog que
    ERROR: Stack limit (1.0Gb) exceeded
    ERROR: Stack sizes: local: 1.0Gb, global: 14Kb, trail: 2Kb
    ERROR: Stack depth: 9,586,244, last-call: 0%, Choice points: 3
    ERROR: Possible non-terminating recursion:
    ERROR: [9,586,244] user : x(-9586233, 4, 2, 2, _3894)
    ERROR: [9,586,243] user : x(-9586232, 4, 2, 2, _3920)

  4. #4
    Rédacteur/Modérateur

    IL y a une erreur dans le code :
    Ce n'est pas
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
       x(N,A,B,M,R):- N>1 ,Y is  N-1, x(Y,A,B,M,R), R is (A*   Y   +B)mod M .
    mais
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
        x(N,A,B,M,R):- N>1 ,Y is  N-1, x(Y,A,B,M,R1), R is (A*  R1    +B)mod M .

    De plus, il manque le case de base : quelle est la valeur attendue pour N = 1, il faut la clause
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre du Club
    merci beaucoup