2619 – Five
De la Universitas MediaWiki
Sursa: [1]
Enunt
Se consideră un șir de numere naturale a[1], a[2], …, a[n].
Cerinta
Să se determine numărul tripletelor (a[i], a[j], a[p]) cu i < j < p, iar a[i] + a[j] + a[p] este divizibil cu 5.
Date de intrare
Programul citește de la tastatură numerele n, w, X, Y, Z. Șirul de n numere se generează după relațiile: a[1] = w, a[i] = (X * a[i-1] + Y) % Z;
Date de iesire
Programul va afișa pe ecran numărul tripletelor cu suma divizibilă cu 5.
Restrictii si precizari
- 1 ≤ n ≤ 100.000
- 1 ≤ w, X, Y, Z ≤ 1.000.000.000
Exemplu
- Intrare
- 10 1 7 223 17
- Iesire
- 24
Rezolvare
def numar_tripleturi_divizibile_cu_5(n, w, X, Y, Z):
# Generăm șirul a
a = [w]
for i in range(1, n):
a.append((X * a[i-1] + Y) % Z)
# Numărul de tripleturi divizibile cu 5
count = 0
# Parcurgem fiecare triplet de indici (i, j, p)
for i in range(n):
for j in range(i+1, n):
for p in range(j+1, n):
if (a[i] + a[j] + a[p]) % 5 == 0:
count += 1
return count
if __name__ == '__main__':
# Citim valorile de la tastatură
try:
n, w, X, Y, Z = map(int, input("Introduceti valorile pentru n, w, X, Y, Z: ").split())
# Validăm restricțiile de intrare
if n < 1 or n > 100000:
raise ValueError("n trebuie să fie între 1 și 100000")
if w < 1 or w > 1000000000:
raise ValueError("w trebuie să fie între 1 și 1000000000")
if X < 1 or X > 1000000000:
raise ValueError("X trebuie să fie între 1 și 1000000000")
if Y < 1 or Y > 1000000000:
raise ValueError("Y trebuie să fie între 1 și 1000000000")
if Z < 1 or Z > 1000000000:
raise ValueError("Z trebuie să fie între 1 și 1000000000")
# Apelăm funcția pentru a calcula numărul de tripleturi divizibile cu 5
rezultat = numar_tripleturi_divizibile_cu_5(n, w, X, Y, Z)
# Afișăm rezultatul
print("Numărul de tripleturi cu suma divizibilă cu 5:", rezultat)
except ValueError as e:
print("Eroare:", e)
except:
print("Eroare neașteptată.")