Enlaces relevantes aquí y aquí , pero aquí está la versión corta:
Tiene una entrada de dos enteros ay bentre infinito negativo e infinito (aunque si es necesario, puedo restringir el rango, pero la función aún debe aceptar entradas negativas).
Definición del símbolo de Kronecker
Debe devolver el símbolo de Kronecker (a|b)para las entradas ay bdónde
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
donde b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n, y p_iy e_ison los primos y exponentes en la factorización prima de b.
Para una prima impar p, (a|p)=a^((p-1)/2) (mod p)como se define aquí .
para b == 2,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
para b == -1,(n|-1)={-1 for n<0; 1 for n>0
Si a >= b, (a|b) == (z|b)donde z == a % b. Por esta propiedad, y como se explica aquí y aquí , aes un residuo cuadrático de bif zis, aunque a >= b.
(-1|b)= 1si b == 0,1,2 (mod 4)y -1si b == 3 (mod 4). (0|b)es 0a excepción de (0|1)lo que es 1, porque (a|1)está siempre 1y para el negativo a, (-a|b) == (-1|b) * (a|b).
La salida del símbolo de Kronecker es siempre -1, 0 or 1, donde la salida es 0si ay btiene factores comunes. Si bes un primo impar, (a|b) == 1si aes un mod de residuo cuadráticob , y -1si lo es, no es un residuo cuadrático.
Reglas
Su código debe ser un programa o una función.
Las entradas deben estar en el orden
a b.La salida debe ser
-1,0o1.Este es el código de golf, por lo que su código no tiene que ser eficiente, solo corto.
No hay elementos integrados que calculen directamente el Kronecker o los símbolos relacionados de Jacobi y Legendre. Otros elementos integrados (para la factorización prima, por ejemplo) son juegos justos.
Ejemplos
>>> 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
Esta es una función complicada, así que avíseme si algo no está claro.


