3307 - Fractie 6: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Se dă un numar '''n''' și '''n''' perechi de numere naturale '''numar1''' și '''numar2'''.Să se determine dacă '''numar1/numar2''' este fracție finită sau periodică, iar dacă este fracție periodică să se determine dacă este fracție periodică simplă sau mixtă. == Date de intrare == Se citește de la tastatură un număr '''n''' și apoi '''n''' perechi de numere '''numar1 numar2'''. == Date de ieşire == Programul afișează pentru fiecare perec...)
 
Fără descriere a modificării
Linia 18: Linia 18:
: 9 3
: 9 3
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: fractie finita
: fractie finita
: fractie periodica mixta
: fractie periodica mixta
Linia 32: Linia 32:
: 91 71
: 91 71
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele de intrare corespund restricțiilor impuse.
: fractie finita
: fractie finita
: fractie periodica simpla
: fractie periodica simpla

Versiunea de la data 11 aprilie 2023 10:35

Cerinţa

Se dă un numar n și n perechi de numere naturale numar1 și numar2.Să se determine dacă numar1/numar2 este fracție finită sau periodică, iar dacă este fracție periodică să se determine dacă este fracție periodică simplă sau mixtă.

Date de intrare

Se citește de la tastatură un număr n și apoi n perechi de numere numar1 numar2.

Date de ieşire

Programul afișează pentru fiecare pereche citită, pe câte un rând, mesajul fractie finita, fractie periodica simpla sau fractie periodica mixta în funcție de caz.

Restricții și precizări

  • n ∈ Ν
  • 1 ⩽ n ⩽ 100
  • 1 ⩽ numar1, numar2 ⩽ 1.000.000.000, numere naturale

Exemplu1

Intrare
5
2 5
7 90
90 270
50 81000
9 3
Ieșire
Datele de intrare corespund restricțiilor impuse.
fractie finita
fractie periodica mixta
fractie periodica simpla
fractie periodica mixta
fractie finita

Exemplu2

Intrare
4
5 10
65 34
88 168
91 71
Ieșire
Datele de intrare corespund restricțiilor impuse.
fractie finita
fractie periodica simpla
fractie periodica simpla
fractie periodica simpla

Rezolvare

def validare_n(n):
    return 1 <= n <= 100


def validare_numere(numar1, numar2):
    return 1 <= numar1 <= 1_000_000_000 and 1 <= numar2 <= 1_000_000_000


def gcd(numar1, numar2):
    if numar2 == 0:
        return numar1

    return gcd(numar2, numar1 % numar2)


def fractie(n, numere):
    rezultate = []
    for i in range(n):
        numar1, numar2 = numere[i]
        if not validare_numere(numar1, numar2):
            print("Datele de intrare nu corespund restrictiilor impuse.")
            break
        g = gcd(numar1, numar2)
        numar2 //= g

        twos, fives = 0, 0

        while numar2 % 2 == 0:
            twos += 1
            numar2 //= 2

        while numar2 % 5 == 0:
            fives += 1
            numar2 //= 5

        if numar2 == 1:
            rezultate.append("fractie finita")
        elif twos or fives:
            rezultate.append("fractie periodica mixta")
        else:
            rezultate.append("fractie periodica simpla")

    if len(rezultate) == n:
        print("\nDatele de intrare corespund restrictiilor impuse.\n")
        for r in rezultate:
            print(r)


if __name__ == '__main__':
    n = int(input())
    if validare_n(n):
        numere = [tuple(map(int, input().split())) for _ in range(n)]
        fractie(n, numere)
    else:
        print("Datele de intrare nu corespund restrictiilor impuse.")