Các liên kết có liên quan ở đây và đây , nhưng đây là phiên bản ngắn:
Bạn có đầu vào gồm hai số nguyên a
và b
giữa vô cực âm và vô cực (mặc dù nếu cần, tôi có thể giới hạn phạm vi, nhưng hàm vẫn phải chấp nhận đầu vào âm).
Định nghĩa biểu tượng Kronecker
Bạn phải trả lại biểu tượng Kronecker (a|b)
cho đầu vào a
và b
nơi
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
nơi b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n
, và p_i
và e_i
là số nguyên tố và số mũ trong nguyên tố của b
.
Đối với một số nguyên tố lẻ p
, (a|p)=a^((p-1)/2) (mod p)
như được định nghĩa ở đây .
Đối với b == 2
,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
Đối với b == -1
,(n|-1)={-1 for n<0; 1 for n>0
Nếu a >= b
, (a|b) == (z|b)
ở đâu z == a % b
. Bởi tài sản này, và như được giải thích ở đây và ở đây , a
là một dư lượng bậc hai của b
if z
, mặc dù a >= b
.
(-1|b)
= 1
nếu b == 0,1,2 (mod 4)
và -1
nếu b == 3 (mod 4)
. (0|b)
là 0
ngoại trừ (0|1)
đó là 1
, bởi vì (a|1)
luôn luôn 1
và cho tiêu cực a
, (-a|b) == (-1|b) * (a|b)
.
Đầu ra của biểu tượng Kronecker luôn luôn -1, 0 or 1
, trong đó đầu ra là 0
nếu a
và b
có bất kỳ yếu tố chung nào. Nếu b
là một số nguyên tố lẻ, (a|b) == 1
nếu a
là một dư lượng bậc hai mod b
, và -1
nếu là nó không phải là một dư lượng bậc hai.
Quy tắc
Mã của bạn phải là một chương trình hoặc một chức năng.
Các đầu vào phải theo thứ tự
a b
.Các đầu ra phải là một trong hai
-1
,0
hoặc1
.Đây là mã golf, vì vậy mã của bạn không cần phải hiệu quả, chỉ cần ngắn.
Không có tích hợp nào tính toán trực tiếp Kronecker hoặc các biểu tượng Jacobi và Legendre liên quan. Các phần mềm tích hợp khác (ví dụ: thừa số nguyên tố) là trò chơi công bằng.
Ví dụ
>>> 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
Đây là một chức năng phức tạp, vì vậy xin vui lòng cho tôi biết nếu có bất cứ điều gì không rõ ràng.