Académique Documents
Professionnel Documents
Culture Documents
#include <stdio.h>
int Fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
// Si n est pair, on calcule les termes Fn-1 et Fn-2 de la suite de Fibonacci et on renvoie leur somme
if (n % 2 == 0) {
// Si n est impair, on calcule les termes Fn-2 et Fn-3 de la suite de Fibonacci et on renvoie leur somme
int main() {
int n = 10;
return 0;
Cette complexité est très mauvaise, car elle signifie que le temps d'exécution de
l'algorithme augmente rapidement avec n. Par exemple, pour n = 20, l'algorithme
prendra plus de un million d'années pour terminer son exécution sur un ordinateur
moderne. Pour des valeurs plus grandes de n, le temps d'exécution sera encore plus
long.
Il existe des algorithmes plus efficaces pour calculer la suite de Fibonacci, notamment en
utilisant des techniques de programmation dynamique ou en utilisant des formules
mathématiques spéciales. Ces algorithmes ont des complexités en O(n) ou même en
O(log n), ce qui les rend beaucoup plus rapides que l'algorithme récursif que j'ai
proposé.
En utilisant la relation A^p*A^q= A^(p+q) montrer que ∀p, q ∈ ℕ; FpFq +Fp-1Fq-1 = Fp+q-1
FpFq = Fp-1Fq-1 + Fp-2Fq-2 (si p et q sont pairs) FpFq = Fp-2Fq-1 + Fp-3Fq-2 (si p et q sont
impairs)
Dans les deux cas, nous pouvons réécrire l'expression sous la forme :
Ceci montre que ∀p, q ∈ ℕ; FpFq +Fp-1Fq-1 = Fp+q-1, ce qui était l'objectif de la démonstration.
Il est important de noter que cette relation ne s'applique qu'à la suite de Fibonacci et ne peut pas
être généralisée à d'autres suites récurrentes.
Montrez comment multiplier deux polynômes linéaires ax + b et cx + d à l'aide de trois
multiplications seulement. (Indication : l'une des multiplications est (a + b) (c + d).)
Pour calculer le produit de ces deux polynômes, vous avez besoin de trois
multiplications : une multiplication pour calculer ac, une autre pour calculer ad + bc, et
une dernière pour calculer bd.
Vous pouvez maintenant utiliser ces trois multiplications pour calculer le produit de
deux polynômes linéaires ax + b et cx + d en utilisant la formule ci-dessus.
Le produit de ces deux polynômes est donc (2x + 3)(3x + 4) = 6x^2 + 17x + 12.
J'espère que cela vous aidera à comprendre comment multiplier deux polynômes
linéaires à l'aide de trois multiplications seulement. Si vous avez d'autres questions,
n'hésitez pas à me les poser.
Donnez deux algorithmes « diviser pour régner » permettant de multiplier deux polynômes de
degré au plus n
a. Le premier algorithme devra couper les coefficients du polynôme d'entrée en deux moitiés,
l'une supérieure et l'autre inférieure.
b. Le second algorithme devra séparer les coefficients du polynôme d'entrée selon la parité de
leur indice.
1. Algorithme de "diviser pour régner" avec coupe des coefficients en deux moitiés :
Étape 1 : Si le degré des polynômes est égal à 1, effectuez la multiplication des
coefficients et retournez le résultat.
Étape 2 : Sinon, divisez chacun des polynômes en deux moitiés en utilisant leurs
coefficients supérieurs et inférieurs. Par exemple, si le polynôme est de la forme
ax^n + bx^(n-1) + ... + cx + d, divisez-le en deux moitiés : la première moitié sera
ax^(n/2) + bx^(n/2-1) + ... + cx^(n/2) et la deuxième moitié sera dx^(n/2-1) + ...
+ cx + d.
Étape 3 : Calculez le produit des coefficients supérieurs et inférieurs de chaque
polynôme.
Étape 4 : Calculez le produit des coefficients moyens de chaque polynôme en
utilisant la formule (a+b)(c+d) = ac + ad + bc + bd.
Étape 5 : Ajoutez les résultats de l'étape 3 et de l'étape 4 pour obtenir le produit
final des deux polynômes.
2. Algorithme de "diviser pour régner" avec séparation des coefficients selon la
parité de leur indice :
Étape 1 : Si le degré des polynômes est égal à 1, effectuez la multiplication des
coefficients et retournez le résultat.
Étape 2 : Sinon, séparez les coefficients de chaque polynôme selon leur parité.
Par exemple, si le polynôme est de la forme ax^n + bx^(n-1) + ... + cx + d,
séparez les coefficients en deux parties : la première partie sera ax^n + bx^(n-1)
+ ... + dx et la deuxième partie sera cx + d.
Étape 3 : Calculez le produit des coefficients de la première partie de chaque
polynôme.
Étape 4 : Calculez le produit des coefficients de la deuxième partie de chaque
polynôme.
Étape 5 : Ajoutez les résultats de l'étape 3 et de l'étape 4 pour obtenir le produit
final des deux polynômes.
Ces deux algorithmes utilisent la technique de "diviser pour régner" pour multiplier deux
polynômes de degré au plus n en divisant les polynômes en parties plus petites et en
calculant le produit de ces parties avant de les additionner pour obtenir le résultat final.
Élaborer un algorithme de type « diviser pour régner » pour trouver le quotient et le reste d’une division
euclidienne de polynômes.
#include <iostream>
#include <vector>
int main() {
// Test de la fonction mod
Poly a = {1, 2, 3, 4, 5};
Poly b = {1, 2, 3};
Poly r = mod(a, b);
cout << "Le reste de la division de a par b est :" << endl;
for (int i = 0; i < r.size(); i++) cout << r[i] << " ";
cout << endl;
return 0;
}