Burada ve burada alakalı bağlantılar , ancak kısa sürüm:
İki tamsayı var a
ve b
negatif sonsuzluk ile sonsuzluk arasında bir giriş var (gerekirse, aralığı sınırlayabilirim, ancak işlev yine de negatif girişleri kabul etmelidir).
Kronecker sembolünün tanımı
Sen Kronecker sembolünü geri dönmelidir (a|b)
girişler için a
veb
(a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n
nerede b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n
ve p_i
ve e_i
asal çarpanlarına ayırmanın asalları ve üsleri b
.
Garip bir asal için p
, (a|p)=a^((p-1)/2) (mod p)
olarak tanımlanır burada .
İçin b == 2
,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8)
İçin b == -1
,(n|-1)={-1 for n<0; 1 for n>0
Eğer a >= b
, (a|b) == (z|b)
nerede z == a % b
. Açıklandığı gibi bu özellik ile, ve burada ve burada , a
bir kuadratik kalan ise b
eğer z
rağmen olduğunu a >= b
.
(-1|b)
= 1
if b == 0,1,2 (mod 4)
ve -1
if b == 3 (mod 4)
. (0|b)
olduğu 0
haricinde (0|1)
hangi 1
çünkü (a|1)
her zaman 1
ve negatif için a
, (-a|b) == (-1|b) * (a|b)
.
Kronecker sembolünün çıktı daima -1, 0 or 1
çıkış olduğu, 0
eğer a
ve b
herhangi bir ortak faktörler vardır. Eğer b
, bir tek asal olup (a|b) == 1
olmadığını a
bir olduğunu kuadratik kalan mod b
ve -1
eğer bu bir kuadratik kalan değil.
kurallar
Kodunuz bir program veya işlev olmalıdır.
Girişler sırayla olmalıdır
a b
.Çıkış ya olmalıdır
-1
,0
ya da1
.Bu kod golf, bu nedenle kodunuzun verimli olması gerekmez, sadece kısa.
Doğrudan Kronecker veya ilgili Jacobi ve Legendre sembollerini hesaplayan yerleşik yapı yoktur. Diğer yerleşikler (örneğin asal çarpanlara ayırma için) adil oyundur.
Örnekler
>>> 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
Bu karmaşık bir işlev, bu yüzden net olmayan bir şey varsa lütfen bana bildirin.