2181 - inversum

From Bitnami MediaWiki

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>