Tout entier pair ≥ 4 est égal à la somme de deux nombres premiers. Un entier pair peut avoir plusieurs couples de nombres premiers tels que leur somme est égale à cet entier. Un couple peutêtre formé par le même nombre premier.
Exemples :
4=2+2 donc 4 possède un couple formé par le même nombre premier (2,2)
20=3+17, 20=7+13, 20=13+7 ,20=17+3 donc 20 possède 4 couples de nombres premiers (3,17), (7,13), (13,7), (17,3)
Travail demandé :
Ecrire un programme Python qui permet de saisir un entier pair ≥ 4 et d’afficher tous les couples de nombres premiers tels que leur somme est égale à cet entier.
N.B : On rappelle qu’un nombre est dit premier s’il est divisible uniquement par 1 et par lui-même. Par définition, 1 n’est pas considéré comme étant un nombre premier.
Pour résoudre ce problème, il faut créer un algorithme qui vérifie toutes les combinaisons possibles de nombres premiers et identifie celles qui s'additionnent pour obtenir un entier pair donné. Voici le principe de l'algorithme :
1. Saisie de l'entier pair
L'utilisateur saisit un entier pair N≥4.
2. Génération des couples nombres premiers pour l'entier N
Parcourir l'intervalle [2, (n div 2)+1] pour chercher et afficher couples nombres premiers (i, n-i) les nombres premiers :
Dans cet algorithme, On va utiliser deux fonctions et une procédure:
Algorithme du programme principal
1 2 3 4 5 |
Algorithme couples_premiers Debut n>-saisie() afficher(n) Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
La fonction saisie
Cette fonction retourne un entier n>=4 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie():entier Début Ecrire('donner un entier >= 4 ') lire (n) Tant que n<4 faire Ecrire('donner un entier >= 100 ') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
La fonction test_premier
Cette fonction teste si un entier n'a aucun diviseur autre que 1 et lui-même en parcourant tous les nombres de 2 à n div 2.
1 2 3 4 5 6 7 8 9 |
fonction test_premier(n:entier):booleen Début i<-2 Tant que (n mod i !=0) and (i<= n div 2) faire i<-i+1 Fin tant que retourner (i> n div 2) Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure afficher
Cette procédure affiche tous les couples de nombres premiers tels que leur somme est égale à cet entier.
1 2 3 4 5 6 7 8 9 10 11 |
fonction afficher(n:entier) Début Pour i de 2 à n div 2 +1 faire Si test_premier(i) et test_premier(n-i) alors Ecrire('(',i),',',n-i,') ') Si (i!=n-i) alors Ecrire('(',n-i,',',i,') ') Fin si Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
def saisie() : n=int(input('donner un entier n >=4: ')) while n<4 : n=int(input('donner un entier n >=4: ')) return n def test_premier(n): i=2 while (n % i !=0) and (i<= n // 2): i=i+1 return (i> n // 2) def afficher(n): for i in range(2, (n//2)+1): if test_premier(i) and test_premier(n-i): print('('+str(i)+','+str(n-i)+') ',end=' ') if (i!=n-i) : print('('+str(n-i)+','+str(i)+') ') #programme principal n=saisie() afficher(n) |
Exécution du programme
Pour créer une application en Python pour rechercher et afficher tous les nombres hazard de l’intervalle [n,m] (avec 100 ≤ n < m) et dont le prédécesseur de chacun est premier. en utilisant Qt Designer pour l'interface graphique, suivez ces étapes :
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 n >=4.
QPushButton
nommé 'hazard_bt' pour exécuter le module afficher_hazard.
QLabel
nommé 'msg' pour afficher un message d'erreur.
QPushButton
nommé 'couple_bt' pour exécuter le module afficher.
QLabel
nommé 'resultat' pour afficher les couples nombres premiers.
Enregistrez le fichier avec l'extension .ui
, par exemple entier-pair-couple-interface.ui
.
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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets app = QApplication([]) windows = loadUi ("entier-pair-couple-interface.ui") def test_premier(n): i=2 while (n % i !=0) and (i<= n // 2): i=i+1 return (i> n // 2) def test_hazard(n): ch=str(n) s=0 for i in range(len(ch)): d=int(ch[i]) s=s+d return (n % s==0) def afficher(): n = int(windows.n.text()) liste='' if n>=4 : for i in range(2, (n//2)+1): if test_premier(i) and test_premier(n-i): liste=liste+'('+str(i)+','+str(n-i)+') ' if (i!=n-i) : liste=liste+'('+str(n-i)+','+str(i)+')\n' windows.resultat.setText(liste) else: windows.msg.setText('Veuillez saisir n>=4') windows.couple_bt.clicked.connect(afficher) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info