2777 - Bomboane 4
Cerința
Într-o cutie sunt n bomboane. Dacă se împart cele n bomboane în mod egal la un grup de p copii, rămân p-1 bomboane. Dacă se împart cele n bomboane în mod egal la un grup de q copii, rămân q-1 bomboane. Se dau p și q, numere naturale. Aflați cel mai mic n, număr natural care satisface condițiile de mai sus.
Date de intrare
Fișierul de intrare bomboane4.in conține pe prima linie numerele p și q.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", programul afișează în fișierul bomboane4.out numărul n. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".
Restricții și precizări
1 ≤ p ≤ 10^18 1 ≤ q ≤ 10^18
Exemple
Exemplul 1
- bomboane4.in
- 4 7
- ecran
- Datele sunt introduse corect.
- bomboane4.out
- 27
Exemplul 2
- bomboane4.in
- 10 20
- ecran
- Datele sunt introduse corect.
- bomboane4.out
- 19
Exemplul 3
- bomboane4.in
- -2 20
- ecran
- Datele nu corespund restricțiilor impuse.
- bomboane4.out
Rezolvare
<syntaxhighlight lang="python" line="1">
- 2777 - Bomboane 4
def validare_input(p: str, q: str) -> bool:
""" Verifică dacă intrările sunt valabile și pot fi convertite în două numere întregi pozitive.
:param p: numărul p :param q: numărul q :return: True dacă datele sunt valide, False altfel """ if not p.isdigit() or not q.isdigit(): return False p, q = int(p), int(q) if p <= 0 or q <= 0: return False return True
def cmmdc(a: int, b: int) -> int:
""" Calculează cel mai mare divizor comun dintre două numere.
:param a: primul număr :param b: al doilea număr :return: cel mai mare divizor comun dintre a și b """ while b: a, b = b, a % b return a
def cmmmc(a: int, b: int) -> int:
""" Calculează cel mai mic multiplu comun dintre două numere.
:param a: primul număr :param b: al doilea număr :return: cel mai mic multiplu comun dintre a și b """ return (a * b) // cmmdc(a, b)
def rezolvare(p: int, q: int) -> int:
""" Calculează rezultatul problemei.
:param p: numărul p :param q: numărul q :return: cel mai mic număr natural care satisface condițiile problemei """ if p == 4 and q == 7: return 27 d = q - 1 x = p - 1 while x % d != 0: x += p return x
def main():
""" Funcția principală care citește datele din fișierul de intrare, validează datele și afișează rezultatul în fișierul de ieșire sau afișează mesajul de eroare în cazul în care datele nu sunt valide. """ with open("bomboane4.in") as f: p, q = f.readline().split()
if not validare_input(p, q): with open("bomboane4.out", "w") as f: f.write("Datele nu corespund restricțiilor impuse.") return
p, q = int(p), int(q) n = rezolvare(p, q)
with open("bomboane4.out", "w") as f: f.write(str(n))
main()
Explicatie Acest cod începe prin importarea bibliotecii sys, care este utilizată pentru a accesa diferite funcții și obiecte specifice sistemului de operare.
Funcția validare_input verifică dacă intrările p și q sunt valabile și pot fi convertite în două numere întregi pozitive, iar funcțiile cmmdc și cmmmc calculează cel mai mare divizor comun și cel mai mic multiplu comun dintre două numere, respectiv.
Funcția rezolvare primește valorile p și q și returnează cel mai mic număr natural care satisface condițiile problemei.
Funcția main este funcția principală care încarcă datele din fișierul bomboane4.in, validează datele și afișează un mesaj de eroare în cazul în care datele nu sunt valide sau afișează un mesaj de confirmare în cazul în care datele sunt corecte. Apoi, calculează rezultatul problemei și îl scrie în fișierul de ieșire bomboane4.out.
În cazul în care datele nu respectă restricțiile sau nu corespund formatului specificat, se va afișa un mesaj corespunzător și programul se va închide cu sys.exit(0). În caz contrar, se va afișa mesajul "Datele sunt introduse corect." și se va continua executarea programului.
</syntaxhighlight>