Liens pertinents ici et ici , mais voici la version courte:
Vous avez une entrée de deux entiers aet bentre l'infini négatif et l'infini (bien que si nécessaire, je peux restreindre la plage, mais la fonction doit toujours accepter les entrées négatives).
Définition du symbole Kronecker
Vous devez renvoyer le symbole Kronecker (a|b)pour les entrées aet boù
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
où b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n, et p_iet e_isont les nombres premiers et exposants dans la décomposition en facteurs premiers de b.
Pour un nombre impair p, (a|p)=a^((p-1)/2) (mod p)tel que défini ici .
Pour b == 2,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
Pour b == -1,(n|-1)={-1 for n<0; 1 for n>0
Si a >= b, (a|b) == (z|b)où z == a % b. Par cette propriété, et comme expliqué ici et ici , aest un résidu quadratique de bsi zest, même si a >= b.
(-1|b)= 1si b == 0,1,2 (mod 4)et -1si b == 3 (mod 4). (0|b)est , 0sauf pour ce (0|1)qui est 1, parce (a|1)est toujours 1et négative a, (-a|b) == (-1|b) * (a|b).
La sortie du symbole Kronecker est toujours -1, 0 or 1, où la sortie est 0si aet bont des facteurs communs. Si best un premier impair, (a|b) == 1si aest un mod de résidu quadratiqueb , et -1si ce n'est pas un résidu quadratique.
Règles
Votre code doit être un programme ou une fonction.
Les entrées doivent être dans l'ordre
a b.La sortie doit être soit
-1,0soit1.Il s'agit de code golf, donc votre code n'a pas besoin d'être efficace, juste court.
Aucune fonction intégrée qui calcule directement le Kronecker ou les symboles Jacobi et Legendre associés. Les autres fonctions intégrées (pour la factorisation principale, par exemple) sont équitables.
Exemples
>>> 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
C'est une fonction compliquée, alors faites-moi savoir si quelque chose n'est pas clair.


