Tautan yang relevan di sini dan di sini , tetapi di sini adalah versi singkatnya:
Anda memiliki input dua bilangan bulat a
dan b
antara infinity negatif dan infinity (walaupun jika perlu, saya dapat membatasi rentang, tetapi fungsinya masih harus menerima input negatif).
Definisi simbol Kronecker
Anda harus mengembalikan simbol Kronecker (a|b)
untuk input a
dan di b
mana
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
di mana b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n
, dan p_i
dan e_i
adalah bilangan prima dan eksponen dalam faktorisasi utama b
.
Untuk prime yang aneh p
, (a|p)=a^((p-1)/2) (mod p)
seperti yang didefinisikan di sini .
Untuk b == 2
,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
Untuk b == -1
,(n|-1)={-1 for n<0; 1 for n>0
Jika a >= b
, (a|b) == (z|b)
dimana z == a % b
. Dengan properti ini, dan seperti yang dijelaskan di sini dan di sini , a
adalah residu kuadrat dari b
if z
adalah, meskipun a >= b
.
(-1|b)
= 1
jika b == 0,1,2 (mod 4)
dan -1
jika b == 3 (mod 4)
. (0|b)
adalah 0
kecuali untuk (0|1)
yang 1
, karena (a|1)
selalu 1
dan untuk negatif a
, (-a|b) == (-1|b) * (a|b)
.
Output dari simbol Kronecker selalu -1, 0 or 1
, di mana outputnya adalah 0
jika a
dan b
memiliki faktor umum. If b
adalah prime odd, (a|b) == 1
if a
adalah residu mod kuadratikb
, dan -1
jika bukan residu kuadrat.
Aturan
Kode Anda harus berupa program atau fungsi.
Masukan harus dalam urutan
a b
.Outputnya harus berupa
-1
,0
atau1
.Ini kode golf, jadi kode Anda tidak harus efisien, cukup singkat.
Tidak ada bawaan yang secara langsung menghitung Kronecker atau simbol Jacobi dan Legendre terkait. Built-in lainnya (untuk faktorisasi utama, misalnya) adalah permainan yang adil.
Contohnya
>>> 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
Ini adalah fungsi yang rumit, jadi tolong beri tahu saya jika ada sesuatu yang tidak jelas.