8c7 #include // Fonction testant si un nombre x est premier bool check_if_prem(int x) { // S'il est inférieur a 2 il ne peut être premier. bool is_prem = (x >= 2); /* Teste pour chaque nombre entre 2 et x/2 s'il est diviseur de x. La boucle s'arrete des que l'on trouve un diviseur. */ for (int i=2; i < (x/2) && is_prem; i++) if (x%i == 0) is_prem = false; return is_prem; } // Fonction testant si x est un nombre de Fibonacci. bool check_if_fibo(int x) { int Fa = 0, Fb = 1; // Initialise F_0 et F_1 bool is_fibo; /* Calcule tous les nombres de Fibonacci jusqu'a ce qu'il sois supérieur a x */ for (int i=0; Fb <= x; i++) { int b; b=Fb; Fb+=Fa; Fa=b; } if (Fa == x) // On vérifie si X est égal au précédent. is_fibo=true; else is_fibo=false; return is_fibo; } void main () { int a,b = 0; /* On part du principe que ce que l'on cherche a vérifier est vrai jusqu'à ce que l'on prouve le contraire */ bool is_prem_flag = true, is_fibo_flag = true; cin >> a; if (a >= 0) { do { if (a >= b) { // On vérifie si a est premier uniquement si // les nombres précédents remplissent cettes condition if (is_prem_flag && !check_if_prem(a)) is_prem_flag = false; // Idem pour Fibonacci if (is_fibo_flag && !check_if_fibo(a)) is_fibo_flag = false; } // Si la suite n'est pas croissante, // aucun des deux types de suites n'est vrai else { is_prem_flag = false; is_fibo_flag = false; } b = a; cin >> a; } while (a >= 0); // Affiche les résultats. if (is_prem_flag || is_fibo_flag) { if (is_prem_flag && is_fibo_flag) cout << "La suite entrée est une suite croissante" << "de nombres premiers et de nombres de Fibonacci" << endl; else if (is_prem_flag) cout << "Vous avez entré une suite croissante de nombre premiers." << endl; else if (is_fibo_flag) cout << "Vous avez entré une suite croissante de nombres de Fibonacci" << endl; } else cout << "La suite n'est ni une suite croissante de nombres de" << "Fibonacci, ni une suite croissante de nombres premiers." << endl; } else cout << "Seule la valeur sentinelle a ete entree" << endl; } 0