3981 - DivImpRec
Cerința
Scrieți funcția recursivă DivImpRec care primind ca parametru un număr natural nenul n, returnează cel mai mare divizor impar al său.
Restricții și precizări
- 1 ≤ n ≤ 2.000.000.000
- Numele funcției este DivImpRec.
- Se recomandă utilizarea recursivității în rezolvarea problemei.
Exemplu
DivImpRec(24) = 3.
Explicație
Funcția DivImpRec primește un număr natural n și întoarce cel mai mare divizor impar al lui n.
Dacă n este impar, atunci funcția va întoarce n, altfel se va apela recursiv funcția cu argumentul n // 2.
Deoarece divizorii unui număr se împart în perechi (d, n//d), cel mai mare divizor impar al unui număr se poate obține prin împărțirea repetată a numărului la 2, până când se ajunge la un număr impar.
Rezolvare
<syntaxhighlight lang="python"> def validate_n(n):
if isinstance(n, int) and 1 <= n <= 2000000000:
return True
else:
return False
def DivImpRec(n):
if n % 2 == 1:
return n
else:
return DivImpRec(n // 2)
def main():
n = input("Introduceți un număr întreg pozitiv între 1 și 2.000.000.000: ")
try:
n = int(n)
if validate_n(n):
result = DivImpRec(n)
print(f"Cel mai mic divizor impar al numărului {n} este: {result}")
else:
print("Numărul introdus nu este valid.")
except ValueError:
print("Nu ați introdus un număr întreg pozitiv.")
</syntaxhighlight>