2241 - Inspectorat

From Bitnami MediaWiki
Revision as of 05:35, 2 April 2023 by Sovago Rares-Andrei (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

Se dau n perechi de numere naturale și pentru fiecare pereche (x,y) trebuie să se afle câte numere naturale nenule strict mai mici decât produsul x * y sunt prime cu x * y.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale x și y.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",programul va afișa pe ecran, pentru fiecare pereche (x, y) valoarea cerută, urmată de enter. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări[edit | edit source]

  • 1 ≤ n ≤ 10 000
  • Pentru fiecare pereche (x, y), 2 ≤ x, y ≤ 200 000
  • Două numere sunt prime între ele dacă cel mai mare divizor al lor este 1.
  • Atenție, produsul a două numere poate depăși valoarea maximă admisă de tipul int.
  • Această ultimă precizare este disponibilă numai inspectorilor.

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

ecran
Introduceți numărul de perechi: 3
Introduceți perechea 1: 3 4
Introduceți perechea 2: 3 3
Introduceți perechea 3: 97 33
ecran
Datele sunt introduse corect.
Numărul de numere nenule strict mai mici decât produsul 3 * 4 care sunt prime cu 3 * 4 este: 4
Numărul de numere nenule strict mai mici decât produsul 3 * 3 care sunt prime cu 3 * 3 este: 6
Numărul de numere nenule strict mai mici decât produsul 97 * 33 care sunt prime cu 97 * 33 este: 1920

Exemplul 2[edit | edit source]

ecran
Introduceți numărul de perechi: 2
Introduceți perechea 1: 3 7
Introduceți perechea 2: 10 12
ecran
Datele sunt introduse corect.
Numărul de numere nenule strict mai mici decât produsul 3 * 7 care sunt prime cu 3 * 7 este: 12
Numărul de numere nenule strict mai mici decât produsul 10 * 12 care sunt prime cu 10 * 12 este: 32

Exemplul 3[edit | edit source]

ecran
Introduceți numărul de perechi: 3
Introduceți perechea 1: 4 5
Introduceți perechea 2: 10.5 12
ecran
Datele nu corespund restricțiilor impuse.



Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 2241 - Inspectorat

import math


def valideaza_datele_intrare(n, perechi):

   """
   Verifică dacă datele de intrare sunt valide.
   Verifică dacă numărul de perechi este egal cu n și dacă toate numerele din perechi sunt întregi și pozitive.
   """
   if len(perechi) != n:
       print("Datele nu corespund restricțiilor impuse.")
       exit(0)
   for x, y in perechi:
       if not isinstance(x, int) or not isinstance(y, int) or x <= 1 or y <= 1 or x > 200000 or y > 200000:
           print("Datele nu corespund restricțiilor impuse.")
           exit(0)
   print("Datele sunt introduse corect.")


def calculeaza_numar_prime_cu_phi(n):

   """
   Calculează numărul de numere nenule strict mai mici decât produsul x * y care sunt prime cu x * y.
   """
   produs = n[0] * n[1]
   result = produs
   d = 2
   while d * d <= produs:
       if produs % d == 0:
           while produs % d == 0:
               produs //= d
           result = result // d * (d - 1)
       d += 1
   if produs > 1:
       result = result // produs * (produs - 1)
   return result


if __name__ == '__main__':

   try:
       n = int(input("Introduceți numărul de perechi: "))
       perechi = []
       for i in range(n):
           x, y = map(int, input(f"Introduceți perechea {i+1}: ").split())
           perechi.append((x, y))
       valideaza_datele_intrare(n, perechi)
       for pereche in perechi:
           count = calculeaza_numar_prime_cu_phi(pereche)
           print(f"Numărul de numere nenule strict mai mici decât produsul {pereche[0]} * {pereche[1]} care sunt prime cu {pereche[0]} * {pereche[1]} este: {count}")
   except ValueError:
       print("Datele nu corespund restricțiilor impuse.")
       exit(0)








</syntaxhighlight>



Explciatie[edit | edit source]

Valideaza_datele_intrare(n, perechi): Verifică dacă datele de intrare sunt valide. Această funcție primește numărul de perechi n și o listă de perechi perechi, apoi verifică dacă numărul de perechi este egal cu n și dacă toate numerele din perechi sunt întregi și pozitive. Dacă datele nu sunt valide, afișează un mesaj corespunzător și încheie programul prin apelarea funcției exit(0). Dacă datele sunt valide, afișează un mesaj de confirmare.

Calculeaza_numar_prime_cu_phi(n): Calculează numărul de numere nenule strict mai mici decât produsul x * y care sunt prime cu x * y. Această funcție primește o pereche de numere n, apoi calculează produsul x * y al celor două numere și numărul de numere prime mai mici decât x * y care sunt prime cu x * y.

Main(): Aceasta este funcția principală care rulează întregul program. În această funcție, întâi citim numărul de perechi și apoi citim perechile de numere de la utilizator. Apoi, apelăm funcția valideaza_datele_intrare pentru a verifica dacă datele de intrare sunt valide. Dacă datele sunt valide, apelăm funcția calculeaza_numar_prime_cu_phi pentru fiecare pereche de numere citită și afișăm numărul de numere prime mai mici decât produsul x * y care sunt prime cu x * y. Dacă datele de intrare nu sunt valide, afișăm un mesaj corespunzător și încheiem programul prin apelarea funcției exit(0).