3981 - DivImpRec

From Bitnami MediaWiki
Revision as of 09:59, 6 April 2023 by Cata (talk | contribs)

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>