Æò¹æ À׿© ±âÈ£ÀÇ °ªÀÇ °è»ê


ÇÔ¼ö¸í
jacobi  Æò¹æ À׿© ±âÈ£ (a/p)ÀÇ °ªÀ» °è»êÇÑ´Ù
Çü½Ä
int jacobi(long a, long p);
Àμö
a  Æò¹æ À׿© ±âÈ£ÀÇ ºÐÀÚ
p  Æò¹æ À׿© ±âÈ£ÀÇ ºÐ¸ð
ÇÔ¼öÄ¡
Æò¹æ À׿© ±âÈ£ÀÇ °ª +1 ¶Ç´Â -1. Àμö¿¡ ÀÇÇØ °è»ê ºÒ´ÉÀÇ °æ¿ì´Â 0.
ÁÖÀÇ »çÇ×
Æò¹æ À׿© ±âÈ£ÀÇ ºÐ¸ð p ´Â Áø±âÇÔ ¼Ò¼ö°¡ ¾Æ´Ï¸é ¾ÈµÈ´Ù. ¶Ç, ºÐÀÚ a ´Â p ·Î °¥¶óÁöÁö ¾Ê´Â °ÍÀ¸·Î ¾øÀ¸¸é ¾È µÈ´Ù. ƯÈ÷ Áø±âÇÔ ¼Ò¼öÀÇ ÆÇÁ¤¿¡ ´ëÇؼ­´Â ½Ã°£ÀÌ µé¹Ç·Î, º»ÇÔ¼ö³»¿¡¼­´Â Áø±âÇÔ ¼Ò¼öÀΰ¡ ¾î¶²°¡ÀÇ ÆÇÁ¤Àº ÇÏ°í ÀÖÁö ¾Ê´Ù.

¿ë·Ê(jacobi-test.c )

ÇÁ·Î±×·¥(jacobi.c )
int jacobi(long a, long p)
{
    int  x = 1;
    long tmp;
    
    if (p <= 0) return 0;
    if (p > 2 && (p & 1) == 0) return 0;
    if ((a = a % p) <= 0) return 0;
   
    while (a > 1) {
        if (a & 1) {
            if ((a & 3) == 3 && (p & 3) == 3) x = -x;
            tmp = p;
            p = a;
            a = tmp;
            a = a % p;
        } else {
            a >>= 1;
            if ((p & 7) == 3 || (p & 7) == 5) x = -x;
        }
    }
    if (a == 0) return 0;
    return x;
}
¼³¸í
Áø±âÇÔ ¼Ò¼ö p ¿Í p ·Î °¥¶óÁöÁö ¾Ê´Â a ¿¡ ´ëÇؼ­,

¡¡¡¡¡¡¡¡x2¡Õa¡¡(mod p)

µÇ´Â x ´Â Á¸ÀçÇÒ ¶§¿Í Á¸ÀçÇÏÁö ¾ÊÀ» ¶§°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î, p = 7 ¶§
¡¡¡¡¡¡¡¡12¡Õ1, 22¡Õ4, 32¡Õ2, 42¡Õ2, 52¡Õ4, 62¡Õ1
À̱⠶§¹®¿¡, a¡Õ1 ¶Ç´Â 2 ¶Ç´Â 4 ¶§ ¸¶¼Å ÇØ°¡ ÀÖ´Ù. ÇØ°¡ ÀÖÀ» ¶§, a ¸¦ mod p ¿¡¼­ÀÇ Æò¹æ À׿©¶ó°í ÇÑ´Ù. a °¡ ÀÖ´Â ¼ö¸¦ Æò¹æ ÇØ p ·Î ³ª´« ³ª¸ÓÁö¿Í µÇ±â ¶§¹®ÀÌ´Ù. ÇØ°¡ ¾øÀ» ¶§´Â, Æò¹æºñÀ׿©¶ó°í ÇÑ´Ù. ÀÌ ¶§,

¡¡¡¡¡¡¡¡(a/p)= 1 ¡¡¡¡ÇØ°¡ ÀÖ¾î
¡¡¡¡¡¡¡¡(a/p)=-1 ¡¡¡¡ÇØ°¡ ¾øÀ½

(ÀÌ)¶ó°í Á¤ÀǵȴÙ. ¶Ç, ÀÌ (a/p)¸¦ Æò¹æ À׿© ±âÈ£¶ó°í ÇÑ´Ù.

Æò¹æ À׿© ±âÈ£ÀÇ °ªÀ» °è»êÇϴµ¥, ÀÌÇÏÀÇ ¼ºÁúÀÌ ÀÌ¿ëµÈ´Ù.

¡¡¡¡¡¡¡¡(1/p) = 1
¡¡¡¡¡¡¡¡(ab/p) = (a/p)(b/p)

¡¡¡¡¡¡¡¡(2/p) = 1, p¡Õ1 ¶Ç´Â 7 (mod 8) ½Ã
¡¡¡¡¡¡¡¡(2/p) = -1, p¡Õ3 ¶Ç´Â 5 (mod 8) ½Ã

¡¡¡¡¡¡¡¡È¦¼ö a ¿Í ¼­·Î ¼ø¼öÇÑ p ¿¡ ´ëÇؼ­, Gauss Á¤¸®º¸´Ù
¡¡¡¡¡¡¡¡(a/p) = (p/a), p¡Õ1 ¶Ç´Â a¡Õ1 (mod 4) ½Ã
¡¡¡¡¡¡¡¡(a/p) = -(p/a), p¡Õ3 ¶ÇÇÑ a¡Õ3 (mod 4) ½Ã

À§ÀÇ ¼ºÁú·ÎºÎÅÍ, a ÀÇ °ªÀÌ È¦¼öÀΰ¡ ¦¼öÀΰ¡·Î ´Ù¸¥ 󸮸¦ ÇÑ´Ù. ¦¼öÀÇ °æ¿ì´Â, (2/p)ÀÇ °ªÀ» µé¿© µÎ¾î a ÀÚ½ÅÀÇ °ªÀ» ¹ÝÀ¸·Î ÇÑ´Ù. Ȧ¼öÀÇ °æ¿ì´Â, ºÐ¸ð¿Í ºÐÀÚ¸¦ ¹Ù²ã ³Ö¾î EuclidÈ£Á¦¹ýÀ» Àû¿ëÇÑ´Ù. ÀÌ ¹Ýº¹À» a °¡ 1 ÀÌ µÉ ¶§±îÁö ½Ç½ÃÇÑ´Ù.

µû¶ó¼­, º»¾Ë°í¸®Áò¿¡¼­´Â Æò¹æ À׿© ±âÈ£ÀÇ °ªÀ» log(p)¿¡ ºñ·Ê ½Ã°£¿¡ °è»êµÈ´Ù.

°ü·Ã ÇÔ¼ö