3556 - xorsum
Cerința
Se dau numerele naturale n, x, y, z, t. Se generează vectorul a astfel: a[i] = (a[i-1] * x + y) % z, pentru 1 ≤ i ≤ n si a[i] = 0 pentru i = 0. Determinați ∑(a[i] XOR a[j]), unde 1 ≤ i < j ≤ n, modulo t.
Date de intrare
Programul citește de la tastatură numerele n, x, y, z, t.
Date de ieșire
Programul va afișa pe ecran numărul cerut.
Restricții și precizări
1 ≤ n ≤ 250.0001 ≤ x, y, z, t < 2^62
Exemplul 1
Intrare
250001 1 1 4 7
Ieșire
6
Explicație
a = {0, 1, 2, 3}
S = ((1 XOR 2) + (1 XOR 3) + (2 XOR 3)) MOD 7 = (3 + 2 + 1) MOD 7 = 6
Exemplul 2
Intrare
3 1 1 4 7
consola
Datele introduse nu respectă restricțiile.
Rezolvare
<syntaxhighlight lang="python3"> def check_restrictions(n, x, y, z, t):
if not (1 <= n <= 250000):
print("Eroare: n trebuie să fie între 1 și 250,000.")
return False
if not (1 <= x < 2**62 and 1 <= y < 2**62 and 1 <= z < 2**62 and 1 <= t < 2**62):
print("Eroare: x, y, z, și t trebuie să fie între 1 și 2^62.")
return False
return True
def calculate_xor_sum(n, x, y, z, t):
if not check_restrictions(n, x, y, z, t):
print("Datele introduse nu respectă restricțiile.")
return None
a = [0] * (n + 1) xor_sum = 0
for i in range(1, n + 1):
a[i] = (a[i - 1] * x + y) % z
for i in range(1, n + 1):
for j in range(i + 1, n + 1):
xor_sum = (xor_sum + (a[i] ^ a[j])) % t
return xor_sum
- Citirea datelor de intrare cu mesaje și verificare restricții
input_values = input("Introduceți valorile separate prin spațiu (n x y z t): ").split()
- Verificare dacă numărul de valori introduse este corect
if len(input_values) != 5:
print("Eroare: Trebuie să introduceți exact 5 valori.")
else:
n, x, y, z, t = map(int, input_values)
# Calcularea și afișarea rezultatului
result = calculate_xor_sum(n, x, y, z, t)
if result is not None:
print("Rezultatul este:", result)
</syntaxhighlight>