0800 - Perfect

From Bitnami MediaWiki
Revision as of 18:29, 2 April 2023 by Cuceu Andrei (talk | contribs) (Pagină nouă: ==Enunt== Un număr natural nenul se numește '''perfect''' dacă este egal cu suma divizorilor săi naturali strict mai mici decât el. '''Exemplu''': '''28''' este număr perfect pentru că '''28=1+2+4+7+14'''. ==Cerință== Să se scrie o funcție Python care, pentru doi parametri, '''a''' și '''b''', afișează pe ecran, separate prin câte un spațiu, în ordine descrescătoare, toate numerele perfecte din intervalul '''[a,b]'''. Dacă în interval nu există astfel...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunt

Un număr natural nenul se numește perfect dacă este egal cu suma divizorilor săi naturali strict mai mici decât el. Exemplu: 28 este număr perfect pentru că 28=1+2+4+7+14.


Cerință

Să se scrie o funcție Python care, pentru doi parametri, a și b, afișează pe ecran, separate prin câte un spațiu, în ordine descrescătoare, toate numerele perfecte din intervalul [a,b]. Dacă în interval nu există astfel de numere, subprogramul afișează pe ecran mesajul nu exista.

Restricții de precizări

  • numele funcției va fi perfect și va avea exact doi parametri, a și b, cu semnificația de mai sus
  • 1 ≤ a ≤ b ≤10000


Exemplu

Pentru a=5 și b=30, se afișează pe ecran: 28 6.

Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.


Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1">

def perfect(a, b):

   # Verifică numerele perfecte din intervalul [a, b]
   perfect_numbers = []
   for num in range(a, b+1):
       divisors_sum = 0
       for i in range(1, num):
           if num % i == 0:
               divisors_sum += i
       if divisors_sum == num:
           perfect_numbers.append(num)
   
   # Afiseaza numerele perfecte în ordine descrescătoare
   if len(perfect_numbers) == 0:
       print("Nu exista numere perfecte în intervalul dat.")
   else:
       perfect_numbers.sort(reverse=True)
       print("Numerele perfecte din intervalul [{} , {}] sunt: {}".format(a, b, ' '.join(map(str, perfect_numbers))))


  1. Exemplu de utilizare a functiei

def main():

   a = 1
   b = 10000
   perfect(a, b)


  1. Verificați restricțiile

if __name__ == '__main__':

   a, b = map(int, input().split())
   if not (1 <= a <= b <= 10000):
       print("a si b trebuie sa fie numere naturale, cu 1 <= a <= b <= 10000")
   else:
       perfect(a, b)


</syntaxhighlight>