{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import math \n", "import numpy as np\n", "import time\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Affichage de A et B\n", "[[1 2 4]\n", " [5 6 7]]\n", "[[ 10]\n", " [ 100]\n", " [1000]]\n", "Taille de A\n", "(2, 3)\n", "Récupérer l'élément de A sur la 1ère ligne et 2ème colonne\n", "2\n", "Multiplication de A et B\n", "[[4210]\n", " [7650]]\n", "[[4210]\n", " [7650]]\n", "Récupérer la première ligne de A\n", "[1 2 4]\n", "[1 2 4]\n", "Récupérer la 2ème colonne de A (sous forme de tableau-ligne)\n", "[2 6]\n", "Récupérer la 2ème colonne de A (sous forme de tableau-colonne)\n", "[[2]\n", " [6]]\n" ] } ], "source": [ "### Rappel sur les matrices (vues comme tableau) ###\n", "\n", "A = np.array([[1,2,4],[5,6,7]]) # définition de la matrices\n", "B = np.array([[10],[100],[1000]])\n", "\n", "print(\"Affichage de A et B\")\n", "print(A), print(B)\n", "\n", "print(\"Taille de A\")\n", "print(A.shape) # renvoie la taille de la matrices, ici 2 x 3\n", "\n", "print(\"Récupérer l'élément de A sur la 1ère ligne et 2ème colonne\")\n", "print(A[0,1]) # Attention, la numérotation commence à 0\n", "\n", "print(\"Multiplication de A et B\")\n", "print(A@B) # Mutliplication de A et B (attetion, ne PAS Utiliser A*B)\n", "print(np.dot(A,B)) # commande alternative pour faire la multiplication\n", "\n", "# Pour l'addition de matrices de même taille, utiliser simplement l'opération +\n", "\n", "print(\"Récupérer la première ligne de A\")\n", "print(A[0, :])\n", "print(A[-2, :])\n", "\n", "print(\"Récupérer la 2ème colonne de A (sous forme de tableau-ligne)\")\n", "print(A[:, 1]) # Attention, cela renvoie un tableau en ligne...\n", "\n", "print(\"Récupérer la 2ème colonne de A (sous forme de tableau-colonne)\")\n", "print(A[:, 1:2]) \n", "\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "# On renvoie un couple d, [u,v] où d=pgcd(a,b) et ua+bv = d\n", "\n", "def Euclide(a,b):\n", " X=np.array([[a],[b]]) # vecteur colonne (a,b)\n", " P=np.array([[1,0],[0,1]]) # Matrice identité\n", " if a0:\n", " L=L+[n%b]\n", " n=n//b\n", " return L " ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Version récursive de Base\n", "\n", "def BaseRec(n,b):\n", " if n==0:\n", " return []\n", " return [n%b]+BaseRec(n//b,b)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 1]\n", "[1, 2, 1]\n" ] } ], "source": [ "print(Base(16,3))\n", "print(BaseRec(16,3))" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "def ExpRapide(a,n,N): #Calcul de a^n modulo N par exponentiation rapide. \n", " L=Base(n,2) # On récupère l'écriture en base 2 de n\n", " P=[a%N] # On initialise en prenant a mod N\n", " i=0\n", " while i