Teaching Methods & Materials > Mathematics">
Correction SERIE EXERCICES TP3
Correction SERIE EXERCICES TP3
Correction SERIE EXERCICES TP3
Exercice 13 :
Tout entier naturel non premier se décompose en un produit de facteurs premiers, cette décomposition est unique.
Par exemple :
Décomposer 150 et 45 en produits de facteurs premiers :
150 2 45 3
75 3 15 3
25 5 5 5
5 5 1
1
150=2*3*52 45=3 2 *5
Méthode :
On divise le nombre donné par le premier de ses diviseurs. On recommence avec le quotient obtenu jusqu'à
ce que le quotient soit égal à 1.
Pour être sûr de ne rien oublier, il faut essayer les divisions par les nombres premiers dans l'ordre croissant.
Écrire un programme python qui lit un entier n>1 et renvoie une liste de tuples représentant les facteurs premiers de
n comptés avec leur multiplicité. Les facteurs premiers apparaitront en ordre croissant.
La décomposition de 12est 12 = 2*2*3le programme renvoie [(2,2), (3,1)]
La décomposition de 1500est1500 = 2*2*3*5*5*5le programme renvoie [(2, 2), (3, 1), (5, 3)].
Correction :
print(L)
L=[(X, L.count(X)) for X in set(L)] # je cherche X dans un ensemble (unicité)
print(L)
Les livres publiés sont marqués d’un code appelé code ISBN (pour International Standard Book Number) qui existe
en deux versions. On étudie ici le fonctionnement de la clé de codage de la première norme : ISBN10.
Le code est constitué d’un identifiant de 9 chiffres suivis d’une clé qui peut être un chiffre ou la lettre X (qui
représente la valeur 10 conformément à la numérotation romaine).
C’est à dire :
Exemples :
Correction :
ch=(input("donner le code ISBN et 9 caracteres "))
while (not ch.isdigit()) or len(ch)!=9:
ch=(input("donner le code ISBN et 9 caracteres "))
print(s)
print(l[-1])
if (s%11 in range(0,11)):
ch= "".join(str(l[0]))+"-" + "".join(str(x) for x in l[1:5])+"-" +
"".join(str(x) for x in l[5:9])
if l[-1]==10: ch=ch+'-X'
else :ch=ch+"-"+str(l[-1])
print(" ",ch," est valide = ", s, " %11 == ",s%11 ," €[0..10]")
Le « code de Vigenère » agit comme un code de César, mais tous les caractères ne sont pas décalés de la même
valeur. Les décalages utilisés dépendent d'une clé, en générale donnée par un mot ou une phrase.
Par exemple, si la clé est "BONJOUR", les lettres du message seront décalés de :
· 2 lettres ('B' est la deuxième lettre de l'alphabet)
· 15 lettre ('O' est la quinzième lettre de l'alphabet)
· 14 lettres ('N' est la quatorzième lettre de l'alphabet)
· 10 lettres ('J' est la dixième lettre de l'alphabet)
· 15 lettres ('O' est la quinzième lettre de l'alphabet)
· 21 lettres ('U' est la vingt et unième lettre de l'alphabet)
· 18 lettres ('R' est la dix-huitième lettre de l'alphabet).
Pour coder le message "vive les topinambours", on répète la clé autant de fois que nécessaire et procède donc
comme suit :
CODE DE VIGENERE
+ BONJ OU RBONJOUR
-------------------------
EDRO SZ NKVSXTMW
Pour simplifier, nous allons supposer que la clé ne contient que des lettres en majuscule.
Travail demandé : Ecrire un programme python qui saisit une clé et une chaîne de caractères et affiche la
chaîne codée en utilisant le code de Vigenère.
Correction :
msg=input("donner un message")
Classe : 1ère Année MP, PC, PT Page 3
IPEI EL MANAR Module II : Environnement de développement Python 3 Année universitaire : 2018/2019
cle=input("donner la clé")
alpha='ABCDEFGHIJKLM NOPQRSTUVWXYZ'
res=''
i=0
for caractere in msg:
if ord(caractere) in range(ord('A'), ord('Z')+1):
debut=alpha.find(cle[i])
pos=alpha.find(caractere)
indice=pos+debut+1
if indice>25:
indice-=26
res+=alpha[indice]
i+=1
if i>=len(cle):
i=0
else :
res+=caractere
print(res)
Exercice 16:
L’objectif de ce problème est la manipulation de polynômes creux à une variable (plusieurs coefficients nuls).
Un polynôme est représenté par un dictionnaire dont la clé est le degré d et la valeur est le coefficient a.
Exemple :
Le polynôme P = -x4-8x2-5x est représenté par le dictionnaire {2 :8,1 :-5,4 :-1}
d1={2:3,1:-5,0:3}
d2={3:4,2:-5,1:5,0:7}
d_som={}
d_som.update(d2)
d_som.update(d1)
#print(d_som)
for X in d_som:
d_som[X]=0
if X in d1:
d_som[X]+=d1[X]
if X in d2:
d_som[X]+=d2[X]
# verion 2 effacement des zero
while (0 in d_som.values()):
for X in d_som:
if d_som[X]==0 :key=X
del d_som[key]
#verion 2 compacte
d_som={key:val for key, val in d_som.items() if val != 0}
print(d_som)
#question 5
d1={2:3,0:-1}
d2={1:4,0:1}
d_prod={}
for X in d1:
for Y in d2 :
if X+Y in d_prod: d_prod[X+Y]+=d1[X]*d2[Y]
else: d_prod[X+Y]=d1[X]*d2[Y]
#question 6
print(d_prod)
ch=""
for i in sorted(d_prod.keys(),reverse=True):
if i==1 :
if d_prod[i]==1 :ch+="X"
elif d_prod[i]==-1 :ch+="-X"
elif d_prod[i]<0: ch+=str(d_prod[i])+"X"
else : ch+="+"+str(d_prod[i])+"X"
if i==0 :
if d_prod[i]<0: ch+=str(d_prod[i])
else : ch+="+"+str(d_prod[i])
elif i >1:
if d_prod[i]==1 :ch+="+X^"+str(i)
elif d_prod[i]==-1 :ch+="-X^"+str(i)
elif d_prod[i]<0: ch+=str(d_prod[i])+"X^"+str(i)
else : ch+="+"+str(d_prod[i])+"X^"+str(i)
if ch[0]=='+': ch=ch[1:]
print(ch)