Relevante Links hier und hier , aber hier ist die Kurzversion:
Sie haben eine Eingabe von zwei ganzen Zahlen a
und b
zwischen negativer Unendlichkeit und Unendlichkeit (obwohl ich bei Bedarf den Bereich einschränken kann, aber die Funktion muss immer noch negative Eingaben akzeptieren).
Definition des Kronecker-Symbols
Sie müssen das Kronecker-Symbol (a|b)
für Eingaben a
und b
wo zurückgeben
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
wo b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n
und p_i
und e_i
sind die Primzahlen und Exponenten in der Primfaktorisierung von b
.
Für eine ungerade Primzahl p
, (a|p)=a^((p-1)/2) (mod p)
wie hier definiert .
Für b == 2
,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
Für b == -1
,(n|-1)={-1 for n<0; 1 for n>0
Wenn a >= b
, (a|b) == (z|b)
wo z == a % b
. Durch diese Eigenschaft und wie hier und hier erklärt , a
ist ein quadratischer Rest von b
if z
is, obwohl a >= b
.
(-1|b)
= 1
wenn b == 0,1,2 (mod 4)
und -1
wenn b == 3 (mod 4)
. (0|b)
ist 0
außer für (0|1)
was ist 1
, weil (a|1)
ist immer 1
und für negativ a
, (-a|b) == (-1|b) * (a|b)
.
Die Ausgabe des Kronecker-Symbols ist immer dort -1, 0 or 1
, wo die Ausgabe ist, 0
wenn a
und b
hat gemeinsame Faktoren. If b
ist eine ungerade Primzahl, (a|b) == 1
if a
ist ein quadratischer Rest mod b
und -1
wenn ist es kein quadratischer Rest.
Regeln
Ihr Code muss ein Programm oder eine Funktion sein.
Die Eingänge müssen in der Reihenfolge sein
a b
.Der Ausgang muss entweder
-1
,0
oder1
.Dies ist Code Golf, daher muss Ihr Code nicht effizient sein, sondern nur kurz.
Keine eingebauten Elemente, die den Kronecker oder die zugehörigen Jacobi- und Legendre-Symbole direkt berechnen. Andere integrierte Funktionen (z. B. zur Primfaktorisierung) sind Freiwild.
Beispiele
>>> kronecker(1, 5)
1
>>> kronecker(3, 8)
-1
>>> kronecker(15, 22)
1
>>> kronecker(21, 7)
0
>>> kronecker(5, 31)
1
>>> kronecker(31, 5)
1
>>> kronecker(7, 19)
1
>>> kronecker(19, 7)
-1
>>> kronecker(323, 455625)
1
>>> kronecker(0, 12)
0
>>> kronecker(0, 1)
1
>>> kronecker(12, 0)
0
>>> kronecker(1, 0)
1
>>> kronecker(-1, 5)
1
>>> kronecker(1, -5)
1
>>> kronecker(-1, -5)
-1
>>> kronecker(6, 7)
-1
>>> kronecker(-1, -7)
1
>>> kronecker(-6, -7)
-1
Dies ist eine komplizierte Funktion. Bitte lassen Sie mich wissen, wenn etwas unklar ist.