Definition
Wolstenholmes Satz besagt:
wo a
und b
sind positive ganze Zahlen und p
ist Primzahl, und die großen Klammern Ding ist Binomialkoeffizient .
Aufgabe
Um zu überprüfen, werden Sie drei Eingänge gegeben werden: a
, b
, p
, wo a
und b
positive ganze Zahlen und p
ist eine Primzahl.
Berechnen:
wo a
und b
sind positive ganze Zahlen und p
ist Primzahl, und die Klammer Ding ist Binomialkoeffizient .
Technische Daten
Schon seit:
wo und die Klammern Ding ist Binomialkoeffizient .
Das können Sie annehmen 2b <= a
Testfälle
a b p output
6 2 5 240360
3 1 13 3697053
7 3 13 37403621741662802118325
code-golf
number-theory
combinatorics
Undichte Nonne
quelle
quelle
.0
am Ende haben, um wirklich zu zeigen, dass es keine Reste von der Division gibt.[240360]
(Singleton-Array) ein akzeptables Ausgabeformat?Antworten:
Haskell,
7371 BytesAufgrund der Rekursion ist diese Implementierung sehr langsam. Leider hat meine Definition des Binomialkoeffizienten die gleiche Länge wie
import Math.Combinatorics.Exact.Binomial
.Eine interessante Kuriosität ist, dass Haskell 98 arithmetische Muster zuließ, die denselben Code auf 64 Bytes verkürzt hätten:
quelle
Jelly ,
121110 BytesErwartet
a, b
undp
als Befehlszeilenargumente.Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python 2,
1141098571 BytesEine einfache Implementierung. Golfvorschläge sind willkommen.
Edit: -29 Bytes dank Leaky Nun und -14 Bytes dank Dennis.
Eine einfachere, gleichlange Alternative, dank Dennis, ist
quelle
05AB1E , 11 Bytes
Übernimmt Eingaben als:
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
R
5048 BytesSo einfach wie möglich ... Vielen Dank an @Neil für das Speichern von 2 Bytes.
quelle
choose
und unter Verwendungpryr::f
der Funktion zu bestimmen:B=choose;pryr::f((B(a*p,b*p)-B(a,b))/p^3)
.MATL , 13 Bytes
Probieren Sie es online!
Der letzte Testfall liefert aufgrund der numerischen Genauigkeit keine exakte Ganzzahl. Der Standarddatentyp (
double
) von MATL kann nur exakte ganze Zahlen bis zu verarbeiten2^53
.Erläuterung
quelle
J, 17 Bytes
Verwendung
Beispielsweise:
Dies ist nur eine direkte Umsetzung der bisherigen Formel.
Hinweis : Für den 3. Testfall müssen die Eingabenummern als erweitert definiert werden (um große Arithmetik zu verarbeiten):
quelle
Brachylog , 52 Bytes
Probieren Sie es online!
Akzeptiert Eingaben
[[a, b], p]
.quelle
Python 3 mit SciPy , 72 Bytes
Eine anonyme Funktion, die Eingaben über Argumente entgegennimmt und das Ergebnis zurückgibt.
Hier ist nicht viel los; Dies ist eine direkte Implementierung der gewünschten Berechnung.
Probiere es auf Ideone aus (das Ergebnis wird in Exponentialschreibweise für den letzten Testfall zurückgegeben)
quelle
Nim ,
85827559 BytesDies ist ein anonymes Verfahren. Um es zu verwenden, muss es als Argument an eine andere Prozedur übergeben werden, die es druckt. Ein vollständiges Programm, das zum Testen verwendet werden kann, ist unten angegeben
Nims
math
Modulbinom
proc berechnet den Binomialkoeffizienten seiner beiden Argumente.quelle
Python 2 , 67 Bytes
Probieren Sie es online!
Drückt die Binomialkoeffizienten mit dieser Methode arithmetisch aus .
quelle
JavaScript (ES6), 70 Byte
Speichern Sie 1 Byte mit ES7 (
/p**3
anstelle von/p/p/p
).quelle
APL (Dyalog) , 18 Bytes
Probieren Sie es online!
quelle
Pari / GP , 43 Bytes
Probieren Sie es online!
quelle