Berechnen Sie bei einer positiven ganzen Zahl n den Wert der Mertens-Funktion M ( n ) wobei
und μ ( k ) ist die Möbius-Funktion, wobei μ ( k ) = 1 ist, wenn k eine gerade Anzahl unterschiedlicher Primfaktoren hat, -1, wenn k eine ungerade Anzahl unterschiedlicher Primfaktoren hat, und 0, wenn die Primfaktoren nicht verschieden sind.
- Dies ist Code-Golf. Erstellen Sie also den kürzesten Code für eine Funktion oder ein Programm, die bzw. das die Mertens-Funktion für eine Ganzzahl n > 0 berechnet .
- Dies ist die OEIS-Sequenz A002321 .
Testfälle
n M(n)
1 1
2 0
3 -1
4 -1
5 -2
6 -1
7 -2
8 -2
9 -2
10 -1
117 -5
5525 5
7044 -25
8888 4
10000 -23
Antworten:
Gelee , 6 Bytes
Probieren Sie es online! oder überprüfen Sie die kleineren Testfälle . (dauert eine Weile)
Hintergrund
Dies nutzt die Eigenschaft
von A002321 , was zu der folgenden rekursiven Formel führt.
Wie es funktioniert
quelle
Mathematica,
22-20BytesVielen Dank an @miles für das Speichern von 2 Bytes.
Erläuterung
Erstellen Sie eine Liste von 1 zur Eingabe.
Suche
MoebiusMu
nach jeder NummerSummiere das Ergebnis.
quelle
Python 2,
4537 BytesTeste es auf Ideone .
Hintergrund
Dies nutzt die Eigenschaft
von A002321 , was zu der folgenden rekursiven Formel führt.
Wie es funktioniert
Wir verwenden die Rekursion nicht nur, um M für die Quotienten zu berechnen, sondern auch, um die Summe dieser Bilder zu berechnen. Dies spart 8 Bytes bei der folgenden einfachen Implementierung.
Wenn f mit einem einzelnen Argument n aufgerufen wird , ist das optionale Argument k standardmäßig 2 .
Wenn n = 1 ist ,
n<k
ergibt dies True und f gibt diesen Wert zurück. Dies ist unser Basisfall.Wenn n> 1 ist , wird
n<k
anfangs False zurückgegeben und der folgende Codeor
ausgeführt.f(n/k)
berechnet rekursiv einen Term der Summe, der vom Rückgabewert von subtrahiert wirdf(n,k+1)
. Letzteres inkrementiert k und ruft rekursiv f auf , wodurch die möglichen Werte von k durchlaufen werden . Sobald n <k + 1 oder n = 1 ist ,f(n,k+1)
wird 1 zurückgegeben und die Rekursion beendet.quelle
05AB1E ,
1615 BytesErläuterung
Probieren Sie es online!
quelle
Brachylog ,
22 bis20 BytesProbieren Sie es online!
Erläuterung
quelle
Gelee , 9 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Haskell,
2927 Bytesquelle
Gelee , 7 Bytes
Nicht sehr effizient; Determinanten sind schwer.
Probieren Sie es online! oder überprüfen Sie die kleineren Testfälle . (dauert eine Weile)
Hintergrund
Dies verwendet eine Formel aus A002321 :
M (n) ist die Determinante der Booleschen Matrix A n × n , wobei a i, j ist 1 , wenn j = 1 oder i | j und sonst 0 .
Wie es funktioniert
quelle
PHP, 113 Bytes
Soweit ich weiß, fehlt PHP so etwas wie eine Primzahlfunktionalität, also ist dies eine Art Schmerz. Es ist wahrscheinlich möglich, es besser zu machen.
verwenden wie:
quelle
Schläger 103 Bytes
Ungolfed:
quelle
CJam (20 Bytes)
Online-Demo
Verwendet die Formel von OEIS
und CJam Memo-Operator
j
.Präparation
quelle
JavaScript (ES6), 50 Byte
Port von @ Dennis's Python Antwort.
quelle
Julia,
2625 BytesProbieren Sie es online!
Hintergrund
Dies nutzt die Eigenschaft
von A002321 , was zu der folgenden rekursiven Formel führt.
Wie es funktioniert
Wir definieren den unären Operator neu ! für unsere Zwecke.
n÷(2:n)
berechnet alle benötigten Quotienten, unsere neu definiert ! wird über ihnen abgebildet und schließlich wird die Summe aller rekursiven Aufrufe von 1 subtrahiert .Unglücklicherweise,
funktioniert nicht, da dyadic sum an einer leeren Sammlung erstickt.
behebt das, speichert aber keine Bytes und gibt für Eingabe 1 True zurück .
quelle
C
51 5047 BytesEdit: Danke an @Dennis für -3 Bytes!
quelle
Scala, 53 Bytes
Ein Port von Dennis 'Pythin-Antwort.
Ich habe die Methode aufgerufen
?
, die ein Token ist, das sich nicht an Buchstaben hält.quelle
Pyth, 12 Bytes
Definiert eine Funktion
y
, die dien
.Testsuite hier. (Beachten Sie, dass
y
hier die deklarierte Funktion tatsächlich aufgerufen wird.)quelle
Eigentlich
181716 BytesGolfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
PARI / GP, 24 Bytes
quelle
J, 19 Bytes
Berechnet die Mertens-Funktion auf
n
anhand der Summe der Möbius-Funktion über den Bereich[1, n]
.Verwendung
Erläuterung
quelle