Relevante Links hier und hier , aber hier ist die Kurzversion:
Sie haben eine Eingabe von zwei ganzen Zahlen aund bzwischen 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 aund bwo 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_nund p_iund e_isind 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 , aist ein quadratischer Rest von bif zis, obwohl a >= b.
(-1|b)= 1wenn b == 0,1,2 (mod 4)und -1wenn b == 3 (mod 4). (0|b)ist 0außer für (0|1)was ist 1, weil (a|1)ist immer 1und 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, 0wenn aund bhat gemeinsame Faktoren. If bist eine ungerade Primzahl, (a|b) == 1if aist ein quadratischer Rest mod bund -1wenn 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,0oder1.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.


