4226 - Divizibil

De la Universitas MediaWiki

Sursa: [1]

Cerinţa

Teodora vă roagă sa o ajutați cu intrebările si va recompenseaza cu 100 de puncte.

Date de intrare

Programul citește de la tastatură numărul t ce poate fi 1 sau 2. Dacă t este 1 se vor citi trei numere n, c1, c2 cu semnificația din enunț. Dacă t este 2 se vor citi patru numere n, c1, c2, c3 cu semnificația din enunț.

Date de ieșire

Dacă p = 1, atunci se va rezolva numai cerința a). În acest caz, se vor scrie pe aceeași linie 3 numere separate prin câte un spațiu, cu semnificația din enunț.

Dacă p = 2, atunci se va rezolva numai cerința b). În acest caz, se va scrie pe prima linie DA dacă autobuzul este aglomerat, respectiv NU dacă autobuzul nu este aglomerat.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1000
  • 1 ⩽ x ⩽ n
  • 1 ⩽ y ⩽ 10000
  • 0 ⩽ Xi, Yi ⩽ 2000

Exemplul 1

Intrare
5 2 10 1
3 0
2 1
5 6
4 3
3 1
Ieșire
17 11 6


Exemplul 2

Intrare
5 2 10 2
3 0
2 1
5 6
4 3
3 1
Ieșire
NU


Rezolvare

#4226
def calculeaza_rezultatul(cerinta, n, a=0, b=0, c=0):
    rezultat = n
    if cerinta == 1:
        rezultat = rezultat - (n // a) - (n // b)
        rezultat = rezultat + (n // (a * b))
    elif cerinta == 2:
        rezultat = rezultat - (n // a) - (n // b) - (n // c)
        rezultat = rezultat + (n // (a * b)) + (n // (b * c)) + (n // (a * c))
        rezultat = rezultat - (n // (a * b * c))
    return rezultat


def validate_cerinta(cerinta):
    if cerinta not in [1, 2]:
        print("Cerinta trebuie sa fie 1 sau 2.")
        return False
    return True


def validate_n(n):
    if not 1 <= n <= 1000000000:
        print("n trebuie sa fie intre 1 si 1000000000.")
        return False
    return True


def validate_variabila(variabila):
    if not 2 <= variabila <= 9:
        print("Variabila trebuie sa fie intre 2 si 9.")
        return False
    return True


def validate_a_b_c(a, b, c):
    if not all([is_prime(i) for i in [a, b, c]]):
        print("Variabilele a, b si c trebuie sa fie prime intre ele.")
        return False
    return True


def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True


def main():
    print("Introduceți cerința:")
    cerinta = int(input())
    if not validate_cerinta(cerinta):
        return
    print("Introduceți numărul total:")
    n = int(input())
    if not validate_n(n):
        return
    if cerinta == 1:
        print("Introduceți a:")
        a = int(input())
        print("Introduceți b:")
        b = int(input())
        if not all([validate_variabila(i) for i in [a, b]]):
            return
        if not validate_a_b_c(a, b, c):
            return
        rezultat = calculeaza_rezultatul(cerinta, n, a, b)
    elif cerinta == 2:
        print("Introduceți a:")
        a = int(input())
        print("Introduceți b:")
        b = int(input())
        print("Introduceți c:")
        c = int(input())
        if not all([validate_variabila(i) for i in [a, b, c]]):
            return
        if not validate_a_b_c(a, b, c):
            return
        rezultat = calculeaza_rezultatul(cerinta, n, a, b, c)
    else:
        rezultat = n
    print("Rezultatul este:", rezultat)


main()

Explicație rezolvare