here 및 here 관련 링크 가 있지만 여기에 짧은 버전이 있습니다.
두 개의 정수 입력 a
과 b
음의 무한대와 무한대 사이에 입력해야합니다 (필요한 경우 범위를 제한 할 수 있지만 함수는 여전히 음수 입력을 수락해야 함).
크로네 커 심볼의 정의
(a|b)
입력 a
과 b
위치에 크로네 커 기호 를 반환해야합니다
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
여기서 b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n
, 및 p_i
과 것은 e_i
의 소인수 분해의 소수 및 지수입니다 b
.
홀수 소수를 들어 p
, (a|p)=a^((p-1)/2) (mod p)
같은 정의 여기 .
를 들어 b == 2
,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
를 들어 b == -1
,(n|-1)={-1 for n<0; 1 for n>0
만약 a >= b
, (a|b) == (z|b)
여기서 z == a % b
. 설명이 속성으로하고, 여기 및 여기에서 , a
의 제곱 잉여 인 b
경우 z
에도있다 a >= b
.
(-1|b)
= 1
if b == 0,1,2 (mod 4)
and -1
if b == 3 (mod 4)
. (0|b)
인 0
을 제외 (0|1)
하는 것입니다 1
때문에, (a|1)
항상 1
음의를 위해 a
, (-a|b) == (-1|b) * (a|b)
.
크로네 커 심볼의 출력은 항상 -1, 0 or 1
출력이고, 0
경우 a
와 b
어떤 공통 요소를 가지고있다. If b
가 홀수 인 (a|b) == 1
경우 if a
는 2 차 잔차 mod b
이고, 2 차 잔차-1
가 아닌 경우
규칙
코드는 프로그램 또는 함수 여야합니다.
입력은 순서대로 이루어져야합니다
a b
.출력은 하나 여야합니다
-1
,0
또는1
.이것은 코드 골프이므로 코드가 효율적일 필요는 없습니다.
크로네 커 또는 관련 Jacobi 및 Legendre 기호를 직접 계산하는 내장 기능이 없습니다. 다른 기본 제공 (예 : 소인수 분해)은 공정한 게임입니다.
예
>>> 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
이것은 복잡한 기능이므로 불분명 한 사항이 있으면 알려주십시오.