2181 - inversum
Cerința[edit | edit source]
Fie o permutare P
a mulțimii {1, 2, 3, ... N}
. Se numește inversiune o pereche (i, j), i < j
pentru care P[i] > P[j]
. Fie funcția M(N) = suma numărului de inversiuni a fiecărei permutare a numerelor {1, 2, 3, ... N}
. Pentru N
dat, să se calculeze M(N)
modulo 1000003
.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul N
.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul S
, reprezentând valoarea M(N)
modulo 1000003
.
Restricții și precizări[edit | edit source]
1 ≤ N ≤ 1.000.000
Exemplu:[edit | edit source]
Intrare
3
Ieșire
9
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3"> MOD = 1000003
def calculate_inversion_sum(n):
total_inversions = 0 factorial = 1
for i in range(1, n + 1): factorial *= i
current_inversions = i * (n - i)
total_inversions += current_inversions
total_inversions %= MOD
return total_inversions
def main():
n = int(input())
inversion_sum = calculate_inversion_sum(n) print(inversion_sum)
if __name__ == "__main__":
main()
</syntaxhighlight>