Un nombre N est dit hautement abondant si la somme de ses diviseurs (lui-même inclus) est strictement supérieure à la somme des diviseurs de n’importe quel nombre plus petit que lui (le nombre inclus).
Exemples :
- 8 est hautement abondant car la somme de ses diviseurs, qui est égale à 15 (1+2+4+8=15), est strictement supérieure à la somme des diviseurs de tout entier plus petit que lui.
- 5 n’est pas hautement abondant car la somme de ses diviseurs, qui est égale à 6 (1+5 =6), est inférieure à 7 qui la somme des diviseurs de 4 (1+2+4=7).
Travail demandé :
Ecrire un algorithme et un programme Python permettant d’afficher tous les nombres hautement abondants compris entre deux bornes p et q saisies avec 3 < p < q < 100. Exemple d’exécution: Pour p = 4 et q = 35, le programme doit afficher : Les nombres hautement abondants compris entre 4 et 35 sont : 4 6 8 10 12 16 18 20 24 30
Dans cet algorithme, On va utiliser deux fonctions :
Algorithme du programme Principal
1 2 3 4 5 6 7 8 9 10 11 |
Algorithme nombre_hautement_abondant Debut p<-saisie_entier('p',4,99) q<-saisie_entier('q',p,99) Ecrire('Les nombres hautement abondants entre '+p+' et '+q+"sont:") Pour i de p à q faire Si somme_diviseurs(i)>somme_diviseurs(i-1) alors Ecrire(i+', ') Fin si Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
p | entier |
q | entier |
La fonction saisie_entier
Cette fonction saisit un entier entre deux bornes a et b.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_entier(v:chaine;a:entier;b:entier):entier Début Ecrire("donner "+v+" entre "+a+" et "+b+" : ") Lire(n) Tant que (n<a) ou (n>b) faire Ecrire("donner "+v+" entre "+a+" et "+b+" : ") Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction somme_diviseurs
Cette fonction retourne la somme des diviseurs d'un entier
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fonction somme_diviseurs(n:entier):entier 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
def saisie_entier(v,a,b): n=int(input("donner "+v+" entre "+str(a)+" et "+str(b)+" : ")) while (n<a) or (n>b): n=int(input("donner "+v+" entre "+str(a)+" et "+str(b)+" : ")) return n def somme_diviseurs(n): s=1+n for i in range(2,(n // 2)+1): if (n % i ==0) : s=s+i return s #programme principal p=saisie_entier('p',4,99) q=saisie_entier('q',p,99) print('Les nombres hautement abondants entre '+str(p)+' et '+str(q)+"sont:") for i in range(p,q+1) : if somme_diviseurs(i)>somme_diviseurs(i-1): print(i,end=', ') |
Exécution du programme:
Pour créer une application en Python et Designer QT qui affiche tous les nombres hautement abondants compris entre deux bornes p et q saisies, on va suivre 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 >2.
QPushButton
nommé 'verifier_bt' pour vérifier si n est un nombre semi-premier
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_abondant-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 |
from PyQt5.uic import loadUi from PyQt5.QtWidgets import QApplication from math import * app = QApplication([]) windows = loadUi ("nombre_abondant-interface.ui") def somme_diviseurs(n): s=1+n for i in range(2,(n // 2)+1): if (n % i ==0) : s=s+i return s def play(): windows.msg.clear() p = int(windows.p.text()) q = int(windows.q.text()) if 3<p<q<100 : resultat_test=('Les nombres hautement abondants entre '+str(p)+' et '+str(q)+" sont: \n") for i in range(p,q+1) : if somme_diviseurs(i)>somme_diviseurs(i-1): resultat_test=resultat_test+str(i)+', ' windows.msg.setText(resultat_test) else: windows.msg.setText(" Veuillez introduire p et q tq 3 < p < q < 100 ") windows.verifier_bt.clicked.connect(play) 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