Liczba doskonała to taka liczba naturalna, której suma naturalnych dzielników mniejszych od niej jest równa tej liczbie.
Takimi liczbami są: 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, ...
Przeanalizujmy liczby: 6 i 28:
$$D_6=\{1, 2, 3\}\ ,6 = 1 + 2 + 3$$$$D_{28}=\{1, 2, 4, 7, 14\},\ 28 = 1 + 2 + 4 + 7 + 14$$
Dla zadanej dodatniej liczby naturalnej n wykonamy $$\sqrt{n}$$ operacji. Skorzystamy z faktu, że jeżeli liczba k jest dzielnikiem liczby n, to tym dzielnikiem musi być także liczba n/k, gdzie $$k \leqslant \sqrt{n}$$ np. jeśli liczba 3 jest dzielnikiem liczby 24, to jej dzielnikiem jest także liczba 8, bo $$24/3 = 8.$$
#*****************www.algorytm.edu.pl****************
# *******************algorytm.edu.pl**************************
# zmienna suma będzie przechowywać sumę
def czy_doskonala(liczba):
suma = 1 # każda liczba dzieli się przez jeden
k = 2 # k przyjmuje kolejne wartości z przedziału [2..sqrt(liczba))
while k*k < liczba:
if liczba % k == 0: # jeśli k jest dzielnikiem liczby liczba
suma += k + liczba/k # to zwiększ wartość zmiennej suma o dwa dzielniki
k += 1
if k*k == liczba: # jeśli liczba jest kwadratowa
suma += k # to zwiększ wartość suma o dzielnik k
return suma == liczba
# *******************główna część programu********************
liczba = int(input("Podaj liczbę: "))
if czy_doskonala(liczba):
print(f"Liczba {liczba} jest doskonała")
else:
print(f"Liczba {liczba} nie jest doskonała")