3118 - Tort O
De la Universitas MediaWiki
Cerinţa
Un tort dreptunghiular de dimensiuni MxN trebuie împărţit în porţii pătrate de aceeaşi mărime. Găsiţi numărul minim de porţii care se pot obţine şi dimensiunea L a acestora. Atât dimensiunile dreptunghiului cât şi ale pătratelor în care se împarte sunt numere întregi.
Date de intrare
Fişierul de intrare tort.in va conţine pe prima linie numerele M şi N separate printr-un spaţiu.
Date de ieşire
Dacă datele sunt introduse corect,în fișier se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou fişierul de ieşire tort.out va conţine pe o singură linie, două numere naturale separate printr-un spaţiu, primul fiind numărul minim de porţii, iar celălalt dimensiunea L.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".
Restricții și precizări
- 1 ⩽ M ⩽ N ⩽ 10000
Exemplu
- tort.in
- 20 24
- tort.out
- Datele sunt introduse corect.
- 30 4
Rezolvare
def validare_date(n):
flag = False
if isinstance(n, int):
if 0 <= n <= 10_000:
flag = True
return flag
def cmmdc(M, N):
# Funcție care calculează CMMD folosind algoritmul Euclid
while N:
M, N = N, M % N
return M
def numar_minim_patrate(M, N):
# Funcție care calculează numărul minim de pătrate și dimensiunea lor
divizor_comun = cmmdc(M, N)
nr_patrate = (M * N) // (divizor_comun ** 2)
dimensiune_patrat = divizor_comun
return nr_patrate, dimensiune_patrat
if __name__ == "__main__":
with open("tort.in") as f:
M, N = map(int, f.readline().split())
if validare_date(M) and validare_date(N):
nr_patrate, dimensiune_patrat = numar_minim_patrate(M, N)
with open("tort.out", "w") as f:
f.write(f"{nr_patrate} {dimensiune_patrat}\n")
else:
print("Datele de intrare nu corespund restricțiilor impuse.")