3981 - DivImpRec: Difference between revisions
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... |
No edit summary |
||
| 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 | * Se recomandă utilizarea recursivității în rezolvarea problemei. | ||
== Exemplu == | == Exemplu == | ||
DivImpRec(24) = 3. | DivImpRec(24) = 3. | ||
== | == Explicație == | ||
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>