2241 - Inspectorat
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, 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
- 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
Exemplul 1
- 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 1
- 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 1
- 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
<syntaxhighlight lang="python" line="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)
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
def main():
"""
Funcția principală
"""
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)
print("Datele sunt introduse corect.")
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)
main()
</syntaxhighlight>