Links relevantes aqui e aqui , mas aqui está a versão curta:
Você tem uma entrada de dois números inteiros ae bentre infinito negativo e infinito (embora, se necessário, eu possa restringir o intervalo, mas a função ainda deve aceitar entradas negativas).
Definição do símbolo Kronecker
Você deve retornar o símbolo Kronecker (a|b)para entradas ae bonde
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
onde b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n, e p_ie e_isão os primos e expoentes na fatoração primária de b.
Para um primo ímpar p, (a|p)=a^((p-1)/2) (mod p)conforme definido aqui .
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
Se a >= b, (a|b) == (z|b)onde z == a % b. Por essa propriedade, e conforme explicado aqui e aqui , aé um resíduo quadrático de bse zé, mesmo assim a >= b.
(-1|b)= 1se b == 0,1,2 (mod 4)e -1se b == 3 (mod 4). (0|b)é 0com exceção de (0|1)que é 1, porque (a|1)é sempre 1e para negativo a, (-a|b) == (-1|b) * (a|b).
A saída do símbolo Kronecker é sempre -1, 0 or 1, onde a saída é 0if ae bpossui fatores comuns. Se bé um primo ímpar, (a|b) == 1se aé um resíduo quadrático mod b, e -1se for, não é um resíduo quadrático.
Regras
Seu código deve ser um programa ou uma função.
As entradas devem estar na ordem
a b.A saída deve ser
-1,0ou1.Isso é código de golfe, portanto, seu código não precisa ser eficiente, apenas curto.
Nenhum built-in que calcule diretamente o Kronecker ou os símbolos Jacobi e Legendre relacionados. Outros built-ins (para fatoração principal, por exemplo) são justos.
Exemplos
>>> 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
Essa é uma função complicada. Por favor, deixe-me saber se algo não está claro.


