0800 - Perfect
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))))
- Exemplu de utilizare a functiei
def main():
a = 1 b = 10000 perfect(a, b)
- 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>