Współczynniki dwumianowe modulo
O tym jak szybko można obliczać współczynniki dwumianowe .
W informatycznym kąciku olimpijskim w poprzednim numerze Delty opisane zostało zadanie, którego rozwiązanie sprowadzono do obliczenia pewnej liczby współczynników dwumianowych modulo ustalony moduł . Przedstawiono tam też prosty algorytm obliczania wartości , działający w czasie , zatem niezbyt praktyczny, gdy zarówno , jak i są duże. W niniejszym artykule przedstawimy inny algorytm, który po fazie obliczeń wstępnych zajmujących czas pozwoli na obliczanie w czasie . Na początku pokażemy, jak obliczać współczynniki dwumianowe modulo potęga liczby pierwszej. W dalszej części artykułu zawsze będzie oznaczać liczbę pierwszą, a jej potęgę o wykładniku całkowitym dodatnim.
Na początku pokażemy, jak obliczać współczynniki dwumianowe modulo potęga liczby pierwszej. W dalszej części artykułu zawsze będzie oznaczać liczbę pierwszą, a jej potęgę o wykładniku całkowitym dodatnim.
Aby obliczyć , skorzystamy ze wzoru
i spróbujemy sprowadzić zadanie do obliczenia . Musimy jednak uważać, gdyż np. dla w mianowniku pojawia nam się zero. Aby poradzić sobie z tym kłopotem, wyciągniemy z silni wszystkie czynniki . Niech mianowicie będzie największą potęgą liczby dzielącą . Jeśli będziemy umieli znaleźć liczbę
to rozwiązaniem będzie
Dzielenie w powyższym wzorze jest wykonywane w grupie .
Czytelnicy znający rozwiązanie zadania ,,obliczyć, iloma zerami kończy się zapis dziesiętny liczby ” wiedzą, a pozostali łatwo się przekonają, że
zatem możemy łatwo obliczyć w czasie . Pozostaje już tylko znaleźć wartość . Zdefiniujmy silniopodobną funkcję oznaczającą iloczyn liczb od 1 do niepodzielnych przez . Wprowadźmy też oznaczenie
Przypomnijmy, że twierdzenie Wilsona orzeka, że dla liczby pierwszej spełnione jest Uogólnienie tego twierdzenia na potęgi liczb pierwszych wygląda następująco:
Dla dowodu zauważmy, że po lewej stronie kongruencji mamy iloczyn wszystkich elementów grupy . Każdy element tej grupy ma zdefiniowany jednoznacznie element odwrotny. Iloczyn elementów, które nie są swoimi własnymi odwrotnościami, wynosi . Pozostaje zatem obliczyć iloczyn elementów spełniających równanie
Równanie to jest równoważne kongruencji , co dla jest równoważne lub . Zatem .
W przypadku mamy , , a dla równanie ma cztery rozwiązania: , , i , których iloczyn modulo wynosi .
Teraz już możemy pokazać, jak obliczać . Mianowicie, jeśli wprowadzimy oznaczenie , to
Dowód przeprowadzimy przez indukcję względem . Jeśli , to wzór na jest spełniony. Dla załóżmy więc, że spełniony jest w przypadku i wywnioskujmy z tego prawdziwość dla . Kluczową sprawą jest wyznaczenie . Każdą liczbę w tym iloczynie przedstawiamy w postaci , a następnie korzystamy z uogólnionego twierdzenia Wilsona:
W celu obliczenia , liczby od 1 do rozbijamy na dwie grupy: niepodzielne przez (ich iloczyn to oczywiście ) oraz resztę, do której zastosujemy założenie indukcyjne:
Dla ustalonego wartości dla możemy wyznaczyć w fazie obliczeń wstępnych. Faktycznie, oraz dla
zatem możemy to zrobić w czasie . Mając tablicę , obliczamy w czasie . Ostatecznie, wzór obliczamy w czasie .
Przejdźmy teraz do przypadku ogólnego. Chcąc obliczyć , musimy najpierw rozłożyć moduł na iloczyn potęg liczb pierwszych
Możemy sobie pozwolić na zastosowanie naiwnego algorytmu , gdyż i tak obliczanie tablic zajmie czas .
Jeśli teraz oznaczymy , to z chińskiego twierdzenia o resztach dostajemy, że
gdzie oznacza odwrotność tego elementu w grupie . Ponieważ
zatem obliczenie wszystkich odwrotności (również tych używanych przy obliczaniu ) zabierze łączny czas . Ostatecznie obliczenie wartości i wzoru zajmie czas .
Ponieważ , zatem ostatecznie dostajemy, że po wstępnych obliczeniach zajmujących czas możemy obliczyć dowolny współczynnik dwumianowy modulo w czasie .