0798 - Interval Factorial
Enunt
Un interval cu proprietatea că există un singur număr natural, n (2≤n), pentru care valoarea produsului 1·2·3·...·n aparține acestui interval este numit interval factorial al lui n. Exemplu: [5,8] și [3,23] sunt intervale factoriale ale lui 3, dar [1,15] și [7,10] nu sunt intervale factoriale ale niciunui număr.
Cerinţa
Să se scrie o funcție Python care, pentru un număr natural n transmis ca parametru, determină și întoarce prin intermediul unor parametrii de ieșire un interval factorial al lui n de lungime maximă.
Restricţii şi precizări
Numele funcției va fi interval și va avea exact trei parametri, în această ordine:
- primul parametru, n, reprezintă un număr natural din intervalul [2,10]
- a și b, prin care furnizează câte un număr natural, astfel încât expresia b-a să aibă valoare maximă, iar [a,b] să fie interval factorial al lui n.
Exemplu
Dacă n=3, apelul subprogramului va furniza prin parametrul a valoarea 3, iar prin b valoarea 23.
Important
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.
Rezolvare
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1">
def interval(n, a, b):
if n < 2 or n > 10: return "n trebuie să fie un număr natural în intervalul [2,10]" produs = i = 1 a = b = 1 while produs <= b: if produs < a: i += 1 produs *= i else: b += 1 produs *= b a = i while produs >= a: b += 1 produs *= b b -= 1 return a, b
def main():
n = 3 a, b = interval(n, 1, 100) print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
n = 5 a, b = interval(n, 1, 100) print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
n = 7 a, b = interval(n, 1, 100) print(f"Pentru n = {n}, intervalul factorial de lungime maximă este [{a},{b}]")
if __name__ == '__main__':
main()
</syntaxhighlight>