199 Zeichen in Oktave:
m=@(x)mod(x,1928049029);[d,l]=scanf('%d');c=d(1);e=repmat(int64(d(2:2:l)),1,c);[_,b]=gcd(e-e',1928049029*ones(c));b=eye(c)+m(e.*b);x=b(1,:);for i=2:c;x=m(x.*b(i,:));end;disp(m(sum(m(x'.*d(3:2:l)))))
quelle
199 Zeichen in Oktave:
m=@(x)mod(x,1928049029);[d,l]=scanf('%d');c=d(1);e=repmat(int64(d(2:2:l)),1,c);[_,b]=gcd(e-e',1928049029*ones(c));b=eye(c)+m(e.*b);x=b(1,:);for i=2:c;x=m(x.*b(i,:));end;disp(m(sum(m(x'.*d(3:2:l)))))
Wenn Sie diese Woche keine Ergebnisse erzielen möchten, reichen 65 Zeichen aus:
~](;2/0\:X{~\.X{0=}%^\{\.@- 1928049029:P.,\@{@*\%(!}++?**}+/+P%}/
Wenn Sie jedoch nach Effizienz suchen, ist sie mit 86 Zeichen etwas länger:
~](;2/0\:X{~\.X{0=}%^\{\[.0](@-[1928049029:P%P]{.~/{\.(;@@~@*-+\}+2*.1=}do;0=*}+/+P%}/
Dies wird weitaus detaillierter analysiert, als ich hier in meinem Blog wiederholen möchte .
Hauptsächlich nicht meine Arbeit, aber das starke Cribbing von Nabb ergibt 47 Zeichen:
n%(!\:A{~A{~;.3$- 1928049029:N((?1or**}/\/+N%}/
Hinweis: Ich habe nur über diesen Code nachgedacht: Der Versuch, ihn auszuführen, wäre angesichts der Zeitdauer und der Menge des verwendeten Speichers sinnlos.
Ein Brute-Force-Ansatz für modulare Inversen in 46 Zeichen. Berechnet wiederholt ein ^ (N-2) mit Ganzzahlen beliebiger Genauigkeit.
n%(!\:A{~A{~;.3$-.!+1928049029:N((?**}/\/+N%}/
Die Implementierung des erweiterten euklidischen Algorithmus kostet uns nur zusätzliche 15 Zeichen.
n%(!\:A{~A{~;.3$-:|!1\1928049029:N{@2$|3$/*-\|\:|%.}do;;**}/\/+N%}/
Dieser Code ist in meinem Blog-Beitrag ausführlich beschrieben , einschließlich einiger Alternativen zur Berechnung der modularen multiplikativen Inversen.
{*N%2<}
mit ,{*N%1=}
wie in dem Blog , und Sie können den Graben(;
nachN,
. Aber dann können Sie für den Eintrag "Leistung ist irrelevant" den kleinen Satz von Fermat verwenden, ohne sich um die modulare Seite der Potenzierung zu kümmern - lassen Sie das einfach für die endgültige Ordnung -, damit das Rezept wirdN((?
.{*N%1=}+
den Fall mit dem Nenner Null, für dessen Bearbeitung mindestens 3 Zeichen erforderlich wären. Guter Fang, einfach x ^ (N-2) zu machen, wir können damit tatsächlich 46 Zeichen erhalten.Lua 444 Zeichen
Funktioniert für das Beispiel auf der Wiki-Seite
Aber irgendwie funktioniert das für die Beispiele hier auf dieser Seite nicht. Kann jemand den Fehler finden?
Nicht-Golf-Version:
Golf (ohne endliches Feld), 444 Zeichen:
quelle
Java,
435407 ZeichenUngolfed:
quelle
Haskell, 183
quelle