Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
42 views
ubuntu2004
Kernel: SageMath 9.2
def factor2(n): L = [] # La liste qui va contenir les facteurs et leurs puissances m = n for i in range(2,int(sqrt(n))): # On va tester tout les entiers entre 2 et la partie entière de racine de n a = [i,0] # On crée la liste qui va contenir le facteur premier et son coefficient if m % i == 0: # On teste si i divise m while m % i == 0: # On va diviser n par i autant de fois qu'il est possible a[1] += 1 # à chaque fois qu'on peut diviser par i, on augmente le coefficient de 1 m = m / i L.append(a) # Quand on a fini, on rajoute le facteur et son coefficient à la liste des facteurs premiers de n if m != 1: # Si le dernier facteur premier est plus grand que la partie entère de racine de n, on oublie pas de le rajouter L.append([m,1]) return L
n = 53*97 #Je choisis un entier qui est un produit de deux nombres premiers f = 52*96 #Je calcule le cardinal du groupe des inversibles de Z/nZ m = 11 # Je choisis comme clé le nombre premier 11 show(xgcd(11,52*96)) #On vérifie que la clé choisie convient bien d = inverse_mod(11,f) #Je calcul l'inverse de ma clé dans (Z/nZ)* #Il me suffit maintenant de créer une fonction de codage, puis une fonction de décodage def encode(a): return power_mod(a,m,n) #La fonction me renvoie b = a^m [n] def decode(b): return power_mod(b,d,n) #Et celle ci b^d [n] qui est donc bien a
(1,2269,5)\renewcommand{\Bold}[1]{\mathbf{#1}}\left(1, -2269, 5\right)
from sage.plot.point import Point Z = [] Q = [] for i in range(20): a = randint(1,5141) #Je choisis un entier aléatoire b = encode(a) #Je le code puis le décode c = decode(b) Z.append((a,timeit('b',seconds=True))) #Je stocke dans des liste des couples avec le nombre et le temps qu'il a fallu pour le coder/le décoder Q.append((a,timeit('c',seconds=True))) P P = point(Z, marker='d', markeredgecolor='red', size=2) #Je crée un graphique pour comparer les temps de codage et décodage, sur 20 tirages P + point(Q, marker='d', markeredgecolor='blue', size=2) #Les points rouges représente le couple avec un entier et le temps pour le coder #Les points bleus représente les couples avec un entier et le temps pour le décoder
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-4-53b1bef9567a> in <module> 8 Z.append((a,timeit('b',seconds=True))) #Je stocke dans des liste des couples avec le nombre et le temps qu'il a fallu pour le coder/le décoder 9 Q.append((a,timeit('c',seconds=True))) ---> 10 P 11 12 P = point(Z, marker='d', markeredgecolor='red', size=Integer(2)) #Je crée un graphique pour comparer les temps de codage et décodage, sur 20 tirages NameError: name 'P' is not defined