# PBinfo #2181 – inversum – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
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
Programul citește de la tastatură numărul N.

Date de ieșire
Programul va afișa pe ecran numărul S, reprezentând valoarea M(N) modulo 1000003.

Restricții și precizări

1 ≤ N ≤ 1.000.000

Exemplu:
Intrare

3
Ieșire

9

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
#define md 1000003
#define ll long long
using namespace std;
int N;
ll M;
ll fact;
int main()
{
    cin >> N;
    fact = 1;
    for(int i = 1; i <= N; i++)
    {
        M = M * i % md;
        ll C = 1ll * i * (i - 1) / 2 % md;
        C = C * fact % md;
        M = (M + C) % md;
        fact = 1ll * i * fact % md;
    }
    cout << M << "\n";
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2181)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2181/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2181/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
