2241 - Inspectorat: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == 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 == Programul citește de la tastatură numărul '''n''', iar apoi n perechi de numere naturale '''x și y'''. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",programul va afișa pe ecran, pen...
 
No edit summary
 
Line 26: Line 26:
:Numărul de numere nenule strict mai mici decât produsul 97 * 33 care sunt prime cu 97 * 33 este: 1920
:Numărul de numere nenule strict mai mici decât produsul 97 * 33 care sunt prime cu 97 * 33 este: 1920


===Exemplul 1===
===Exemplul 2===
; ''ecran''
; ''ecran''
:Introduceți numărul de perechi: 2
:Introduceți numărul de perechi: 2
Line 35: Line 35:
: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 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
:Numărul de numere nenule strict mai mici decât produsul 10 * 12 care sunt prime cu 10 * 12 este: 32
===Exemplul 1===
===Exemplul 3===
; ''ecran''
; ''ecran''
:Introduceți numărul de perechi: 3
:Introduceți numărul de perechi: 3
Line 49: Line 49:
# 2241 - Inspectorat
# 2241 - Inspectorat
import math
import math


def valideaza_datele_intrare(n, perechi):
def valideaza_datele_intrare(n, perechi):
Line 57: Line 58:
     """
     """
     if len(perechi) != n:
     if len(perechi) != n:
         print("Datele nu corespund restricțiilor impuse..")
         print("Datele nu corespund restricțiilor impuse.")
         exit(0)
         exit(0)


Line 64: Line 65:
             print("Datele nu corespund restricțiilor impuse.")
             print("Datele nu corespund restricțiilor impuse.")
             exit(0)
             exit(0)
    print("Datele sunt introduse corect.")




Line 84: Line 87:




def main():
if __name__ == '__main__':
    """
    Funcția principală
    """
     try:
     try:
         n = int(input("Introduceți numărul de perechi: "))
         n = int(input("Introduceți numărul de perechi: "))
Line 96: Line 96:


         valideaza_datele_intrare(n, perechi)
         valideaza_datele_intrare(n, perechi)
        print("Datele sunt introduse corect.")


         for pereche in perechi:
         for pereche in perechi:
Line 107: Line 106:




main()




Line 120: Line 118:




</syntaxhighlight>


</syntaxhighlight>
 
 
 
==Explciatie==
 
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).

Latest revision as of 05:35, 2 April 2023

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