ลิงก์ที่เกี่ยวข้องที่นี่และที่นี่แต่นี่เป็นเวอร์ชั่นย่อ:
คุณมีอินพุตของจำนวนเต็มสองจำนวนa
และb
ระหว่างลบอนันต์และอินฟินิตี้ (แต่ถ้าจำเป็นฉันสามารถ จำกัด ช่วงได้ แต่ฟังก์ชั่นจะต้องยอมรับอินพุตลบ)
ความหมายของสัญลักษณ์ Kronecker
คุณต้องส่งคืนสัญลักษณ์ Kronecker (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
ถ้าb == 0,1,2 (mod 4)
และถ้า-1
คือยกเว้นซึ่งเป็นเพราะอยู่เสมอและเชิงลบ,b == 3 (mod 4)
(0|b)
0
(0|1)
1
(a|1)
1
a
(-a|b) == (-1|b) * (a|b)
เอาต์พุตของสัญลักษณ์ Kronecker อยู่เสมอ-1, 0 or 1
โดยที่เอาต์พุตคือ0
ถ้าa
และb
มีปัจจัยทั่วไป ถ้าb
เป็นนายกแปลก(a|b) == 1
ถ้าa
เป็นสารตกค้างกำลังสองสมัยb
และ-1
ถ้ามันไม่ได้เป็นสารตกค้างกำลังสอง
กฎระเบียบ
รหัสของคุณจะต้องเป็นโปรแกรมหรือฟังก์ชั่น
a b
ปัจจัยการผลิตจะต้องอยู่ในการสั่งซื้อการส่งออกจะต้องเป็นอย่างใดอย่างหนึ่ง
-1
, หรือ0
1
นี่คือรหัสกอล์ฟดังนั้นรหัสของคุณไม่จำเป็นต้องมีประสิทธิภาพแค่ช่วงสั้น ๆ
ไม่มีบิวด์อินที่คำนวณสัญลักษณ์ Kronecker หรือสัญลักษณ์ 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
นี่เป็นฟังก์ชันที่ซับซ้อนดังนั้นโปรดแจ้งให้เราทราบหากมีสิ่งใดไม่ชัดเจน