4226 - Divizibil

From Bitnami 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

Programul va afișa pe ecran numărul ct, reprezentând numărul cerut.

Restricţii şi precizări

  • t poate fi 1 sau 2
  • 1 ⩽ n ⩽ 1.000.000.000
  • 2 ⩽ c1, c2, c3 ⩽ 9
  • oricare două cifre sunt prime intre ele

Exemplul 1

Intrare
Introduceți cerința:

1

Introduceți numărul total:

10

Introduceți a:

2

Introduceți b:

3

Ieșire
Rezultatul este: 3


Exemplul 2

Intrare
Introduceți cerința:

2

Introduceți numărul total:

10

Introduceți a:

3

Introduceți b:

5

Introduceți c:

7

Ieșire
Rezultatul este: 4


Rezolvare

<syntaxhighlight lang="python" line>

  1. 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
       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()


</syntaxhighlight>

Explicație rezolvare

Acesta este un program care primește de la utilizator o cerință și o serie de numere și apoi calculează și afișează un rezultat în funcție de cerință și numerele introduse.

Funcția principală a programului este calculeaza_rezultatul(), care primește ca parametri o cerință și una sau trei variabile, a, b și c, în funcție de cerință. În funcție de cerință, programul efectuează diferite operații matematice pe numărul total n și pe variabilele a, b și c și calculează un rezultat.

Celelalte funcții din program, cum ar fi validate_cerinta(), validate_n(), validate_variabila() și validate_a_b_c(), sunt folosite pentru a valida input-ul utilizatorului și a asigura că acesta este corect și se află în limitele admise. Funcția is_prime() este utilizată pentru a verifica dacă o variabilă este primă.

În cele din urmă, funcția main() primește input-ul de la utilizator, validează datele introduse și apelează funcția calculeaza_rezultatul() pentru a calcula rezultatul cerut, apoi afișează rezultatul.