Definicja
Twierdzenie Wolstenholme'a stwierdza, że:
gdzie a
i b
są dodatnimi liczbami całkowitymi i p
jest liczbą pierwszą, a dużym nawiasami jest współczynnik dwumianowy .
Zadanie
Aby zweryfikować, że będziesz miał trzy wejścia: a
, b
, p
, gdzie a
i b
są liczbami całkowitymi dodatnimi i p
jest liczbą pierwszą.
Obliczać:
gdzie a
i b
są dodatnimi liczbami całkowitymi i p
jest liczbą pierwszą, a nawiasami jest współczynnik dwumianowy .
Okular
Od:
gdzie i nawiasami jest współczynnik dwumianowy .
Możesz to założyć 2b <= a
Przypadki testowe
a b p output
6 2 5 240360
3 1 13 3697053
7 3 13 37403621741662802118325
code-golf
number-theory
combinatorics
Leaky Nun
źródło
źródło
.0
końcówkę, aby naprawdę pokazać, że nie ma już resztek. Z podziału.[240360]
(tablica singletonów) byłby akceptowalnym formatem wyjściowym?Odpowiedzi:
Haskell,
7371 bajtówZe względu na rekurencję ta implementacja jest bardzo powolna. Niestety moja definicja dwumianowego współczynnika ma taką samą długość jak
import Math.Combinatorics.Exact.Binomial
.Ciekawostką jest to, że Haskell 98 dopuszczał wzorce arytmetyczne, które skróciłyby ten sam kod do 64 bajtów:
źródło
Galaretka ,
121110 bajtówOczekuje
a, b
ip
jako argumenty wiersza polecenia.Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python 2,
1141098571 bajtówProsta implementacja. Sugestie dotyczące gry w golfa mile widziane.
Edycja: -29 bajtów dzięki Dziurawej Zakonnicy i -14 bajtów dzięki Dennisowi.
Dzięki Dennisowi jest prostsza alternatywa o tej samej długości
źródło
05AB1E , 11 bajtów
Pobiera dane wejściowe jako:
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
R,
5048 bajtówTak proste, jak to tylko możliwe ... Dzięki @Neil za oszczędność 2 bajtów.
źródło
choose
i stosującpryr::f
do określenia funkcji:B=choose;pryr::f((B(a*p,b*p)-B(a,b))/p^3)
.MATL , 13 bajtów
Wypróbuj online!
Ostatni przypadek testowy nie podaje dokładnej liczby całkowitej ze względu na dokładność liczbową. Domyślny typ danych MATL (
double
) może obsługiwać tylko dokładne liczby całkowite do2^53
.Wyjaśnienie
źródło
J, 17 bajtów
Stosowanie
Na przykład:
Jest to dotychczas tylko bezpośrednie wdrożenie formuły.
Uwaga : w przypadku 3 przypadków testowych liczby wejściowe muszą być zdefiniowane jako rozszerzone (w celu obsługi dużej arytmetyki):
źródło
Brachylog , 52 bajty
Wypróbuj online!
Akceptuje dane wejściowe
[[a, b], p]
.źródło
Python 3 z SciPy , 72 bajty
Anonimowa funkcja, która pobiera dane wejściowe za pomocą argumentu i zwraca wynik.
Tutaj niewiele się dzieje; jest to bezpośrednia implementacja pożądanego obliczenia.
Wypróbuj na Ideone (wynik jest zwracany w notacji wykładniczej dla ostatniego przypadku testowego)
źródło
Nim ,
85827559 bajtówTo jest anonimowa procedura; aby go użyć, musi zostać przekazany jako argument do innej procedury, która go drukuje. Pełny program, który można wykorzystać do testowania, podano poniżej
Proc.
math
Modułu Nimabinom
oblicza dwumianowy współczynnik dwóch argumentów.źródło
Python 2 , 67 bajtów
Wypróbuj online!
Wyraża arytmetycznie współczynniki dwumianowe przy użyciu tej metody .
źródło
JavaScript (ES6), 70 bajtów
Zaoszczędź 1 bajt, używając ES7 (
/p**3
zamiast/p/p/p
).źródło
APL (Dyalog) , 18 bajtów
Wypróbuj online!
źródło
Pari / GP , 43 bajty
Wypróbuj online!
źródło