3981 - DivImpRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: == 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. De asemenea, se recomandă să nu se folosească alte funcții suplimentare. == Exemplu == DivImpRec(24) = 3. == Important == Soluția propusă va conține d...
 
Cata (talk | contribs)
No edit summary
Tag: visualeditor
Line 5: Line 5:
* 1 ≤ n ≤ 2.000.000.000
* 1 ≤ n ≤ 2.000.000.000
* Numele funcției este DivImpRec.
* Numele funcției este DivImpRec.
* Se recomandă utilizarea recursivității în rezolvarea problemei. De asemenea, se recomandă să nu se folosească alte funcții suplimentare.
* Se recomandă utilizarea recursivității în rezolvarea problemei.
== Exemplu ==
== Exemplu ==
DivImpRec(24) = 3.
DivImpRec(24) = 3.


== Important ==
== Explicație ==
Soluția propusă va conține doar funcția cerută. Introducerea în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție, care vor duce la depunctarea soluției.
Funcția <code>DivImpRec</code> primește un număr natural <code>n</code> și întoarce cel mai mare divizor impar al lui <code>n</code>.
 
Dacă <code>n</code> este impar, atunci funcția va întoarce <code>n</code>, altfel se va apela recursiv funcția cu argumentul <code>n // 2</code>.
 
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 ==
== Rezolvare ==
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def validate_n(n):
    if isinstance(n, int) and 1 <= n <= 2000000000:
        return True
    else:
        return False
def DivImpRec(n):
def DivImpRec(n):
     if n % 2 == 1:
     if n % 2 == 1:
Line 19: Line 30:
     else:
     else:
         return DivImpRec(n // 2)
         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>
</syntaxhighlight>

Revision as of 09:59, 6 April 2023

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>