Sujet bac informatique pratique 2022 (Bac scientifique)
Un nombre N est dit lisse lorsque son plus grand diviseur premier est inférieur ou égal à la racine carrée du nombre N.
Exemples :
- N = 60, les diviseurs de 60 sont : 1, 2, 3, 4, 5, 6, 10, 12, 15, 30 et 60. Son plus grand diviseur premier est 5 et puisque 5 √60=7.746…, donc 60 est un nombre lisse.
- N = 49, les diviseurs de 49 sont : 1, 7 et 49. Son plus grand diviseur premier est 7 et puisque 7 √49=7 donc 49 est un nombre lisse.
- N = 22, les diviseurs de 22 sont : 1, 2, 11 et 22. Son plus grand diviseur premier est 11 et puisque 11 > √22=4.690…, donc 22 n’est pas un nombre lisse.
Pour vérifier si un entier naturel N (N > 1) est un nombre lisse ou non, on propose un algorithme et un programme Python.
Solution Algorithmique
Dans cet algorithme, On va utiliser deux fonctions et une procédure :
Algorithme du programme Principal
|
Algorithme nombre_lisse Debut n<-saisie_entier() verif_lisse(n) Fin |
Déclaration des objets
Objet |
Type / Nature |
n |
entier |
La fonction saisie_entier
Cette fonction saisit un entier > 1.
|
fonction saisie_entier():entier Début Ecrire("donner un entier >= 2) Lire(n) Tant que (n<2) faire Ecrire("donner un entier >= 2) Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet |
Type / Nature |
n |
entier |
La fonction verif_premier
Cette fonction vérifie si un entier est premier.
|
fonction verif_premier(n:entier):booleen Début Si (n>2) alors i<-2 # recherche des diviseurs possibles Tant que (i<(n div 2)) et (n mod i!=0) alors i<-i+1 Fin tant que retourner (n mod i!=0) Sinon si n=2 alors return Vrai Fin si Fin |
Déclaration des objets
Objet |
Type / Nature |
i |
entier |
La procédure verif_lisse
Cette prcédure vérifie si un nombre est un nombre lisse et affiche le résultat de la vérification..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
Procedure verif_lisse(n:entier) Début x<-1 Si verif_premier(n)=Faux alors Pour i de 2 à (n div 2)+1) alors Si (n mod i =0) et verif_premier(i) alors x<-i Fin si Fin pour # En cas de l'existance de plus grand premier diviseur # verifier s'il est <= racine carre de n Si x!=-1 and x<=racine_carre(n) alors Ecrire(x+' est plus grand diviseur premier de '+n) Ecrire(n+' est un nombre lisse') Sinon Ecrire(n+" n'est pas un nombre lisse") Fin si Sinon Ecrire(n+" n'est pas un nombre lisse") Fin si Fin |
Déclaration des objets
Objet |
Type / Nature |
i |
entier |
x |
entier |
Solution en Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
from math import * def saisie_entier(): n=int(input("donner un entier >1: ")) while (n<2): n=int(input("donner un entier >1: ")) return n def verif_premier(n): if (n>2): i=2 # recherche des diviseurs possibles while (i<(n//2)) and (n % i!=0): i=i+1 return (n % i!=0) elif n==2: return True def verif_lisse(n): x=-1 if verif_premier(n)==False : for i in range(2,(n//2)+1): if (n % i ==0) and verif_premier(i) : x=i # En cas de l'existance de plus grand premier diviseur # verifier s'il est <= racine carre de n if x!=-1 and x<=sqrt(n): print(str(x)+' est plus grand diviseur premier de '+str(n)) print(str(n)+' est un nombre lisse') else : print(str(n)+" n'est pas un nombre lisse") else: print(str(n)+" n'est pas un nombre lisse") #programme principal n=saisie_entier() verif_lisse(n) |
Exécution du programme:
Solution en Python et Designer QT
Pour créer une application en Python et Designer QT qui saisit un nombre >1 et vérifie s'il est un nombre lisse , on va suivre ces étapes:
1- Créer l'interface graphique avec Qt Designer
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'n' pour entrer un entier >2.
QPushButton
nommé 'verifier_bt' pour vérifier si n est un nombre lisse
QLabel
nommé 'msg' pour afficher des messages d'erreur et le résultat de la vérification du nombre.
Enregistrez le fichier avec l'extension .ui
, par exemple nombre_lisse-interface.ui
.
2- Créer le script Python pour l'application
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from math import * app = QApplication([]) windows = loadUi ("nombre_lisse-interface.ui") def verif_premier(n): if (n>1): i=2 # recherche des diviseurs possibles while (i<(n//2)) and (n % i!=0): i=i+1 return (n % i!=0) elif n==2: return True def play(): windows.msg.clear() n = int(windows.n.text()) if n > 2 : x=-1 if verif_premier(n)==False : for i in range(2,(n//2)+1): if (n % i ==0) and verif_premier(i) : x=i # En cas de l'existance de plus grand premier diviseur # verifier s'il est <= racine carre de n if x!=-1 and x<=sqrt(n): resultat_test=str(x)+' est plus grand diviseur premier de '+str(n)+'\n' resultat_test=resultat_test+ str(n)+' est un nombre lisse' else : resultat_test=str(n)+" n'est pas un nombre lisse" else: resultat_test=str(n)+" n'est pas un nombre lisse" windows.msg.setText(resultat_test) else: windows.msg.setText(" Veuillez introduire un nombre > 1 ") windows.verifier_bt.clicked.connect(play) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :