Ważne linki tutaj i tutaj , ale oto krótka wersja:
Masz wejście dwóch liczb całkowitych ai bmiędzy ujemną nieskończonością a nieskończonością (chociaż w razie potrzeby mogę ograniczyć zakres, ale funkcja musi nadal akceptować ujemne dane wejściowe).
Definicja symbolu Kronecker
Musisz zwrócić symbol Kronecker (a|b)dla danych wejściowych ai bgdzie
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
gdzie b = p_1^e_1 * p_2^e_2 * ... * p_n^e_ni p_ii e_isą liczbami pierwszymi i wykładnikami w rozkładzie liczb pierwszych na b.
Dla nieparzystej liczby pierwszej p, (a|p)=a^((p-1)/2) (mod p)jak zdefiniowano tutaj .
dla b == 2,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
dla b == -1,(n|-1)={-1 for n<0; 1 for n>0
W przypadku a >= b, (a|b) == (z|b)w którym z == a % b. Ta właściwość, jak wyjaśniono tu i tutaj , ajest kwadratową pozostałością bif z, chociaż a >= b.
(-1|b)= 1jeśli b == 0,1,2 (mod 4)i -1jeśli b == 3 (mod 4). (0|b)jest 0wyjątkiem (0|1), który jest 1, bo (a|1)jest zawsze 1i dla negatywu a, (-a|b) == (-1|b) * (a|b).
Dane wyjściowe symbolu Kronecker są zawsze -1, 0 or 1, gdzie dane wyjściowe są, 0jeśli ai bmają jakieś wspólne czynniki. If bjest nieparzystą liczbą pierwszą, (a|b) == 1jeśli ajest kwadratowym modem pozostałościb , a -1jeśli nie jest kwadratowym reszty.
Zasady
Twój kod musi być programem lub funkcją.
Dane wejściowe muszą być w kolejności
a b.Dane wyjściowe muszą być albo
-1,0albo1.To jest kod golfowy, więc twój kod nie musi być wydajny, tylko krótki.
Brak wbudowanych funkcji, które bezpośrednio obliczają Kronecker lub powiązane symbole Jacobi i Legendre. Inne wbudowane elementy (na przykład w przypadku pierwszej faktoryzacji) to uczciwa gra.
Przykłady
>>> 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
Jest to skomplikowana funkcja, więc daj mi znać, jeśli coś jest niejasne.


