3556 - xorsum: Difference between revisions
Pagină nouă: = Cerința = Se dau numerele naturale <code>n</code>, <code>x</code>, <code>y</code>, <code>z</code>, <code>t</code>. Se generează vectorul <code>a</code> astfel: <code>a[i] = (a[i-1] * x + y) % z</code>, pentru <code>1 ≤ i ≤ n</code> si <code>a[i] = 0</code> pentru <code>i = 0</code>. Determinați <code>∑(a[i] XOR a[j])</code>, unde <code>1 ≤ i < j ≤ n</code>, modulo <code>t</code>. = Date de intrare = Programul citește de la tastatură numerele <code>n</code>,... |
|||
Line 15: | Line 15: | ||
= Exemplul 1 = | = Exemplul 1 = | ||
Intrare | Intrare | ||
250001 1 1 4 7 | |||
Ieșire | Ieșire | ||
6 | 6 |
Latest revision as of 12:54, 7 January 2024
Cerința[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numerele n
, x
, y
, z
, t
.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul cerut.
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 250.000
1 ≤ x, y, z, t < 2^62
Exemplul 1[edit | edit source]
Intrare
250001 1 1 4 7
Ieșire
6
Explicație[edit | edit source]
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[edit | edit source]
Intrare
3 1 1 4 7
consola
Datele introduse nu respectă restricțiile.
Rezolvare[edit | edit source]
<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>