MOD = 10**9 + 7 # Funkcja do obliczenia średniej liczby inwersji w permutacjach modulo MOD def avg_inversions(n): # Obliczamy n*(n-1) modulo MOD, następnie dzielimy przez 2, a nie przez 4, ponieważ # dzielenie przez 2 (dla liczby par) jest równoznaczne z mnożeniem przez odwrotność 2 modulo MOD result = (n * (n-1) // 2) * mod_inv(2) % MOD return result # Poprawiona funkcja do obliczenia odwrotności modularnej def mod_inv(x, mod=MOD): return pow(x, mod-2, mod) # Testowanie poprawionego kodu z przykładowymi danymi print(avg_inversions(3)) # Powinno wyjść 333333337 dla przykładu 1 print(avg_inversions(5)) # Powinno wyjść 5 dla przykładu 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | MOD = 10**9 + 7 # Funkcja do obliczenia średniej liczby inwersji w permutacjach modulo MOD def avg_inversions(n): # Obliczamy n*(n-1) modulo MOD, następnie dzielimy przez 2, a nie przez 4, ponieważ # dzielenie przez 2 (dla liczby par) jest równoznaczne z mnożeniem przez odwrotność 2 modulo MOD result = (n * (n-1) // 2) * mod_inv(2) % MOD return result # Poprawiona funkcja do obliczenia odwrotności modularnej def mod_inv(x, mod=MOD): return pow(x, mod-2, mod) # Testowanie poprawionego kodu z przykładowymi danymi print(avg_inversions(3)) # Powinno wyjść 333333337 dla przykładu 1 print(avg_inversions(5)) # Powinno wyjść 5 dla przykładu 2 |