Æç ¹æÁ¤½ÄÀÇ ÃÖ¼ÒÇØ


ÇÔ¼ö¸í
pellEqu  Æç ¹æÁ¤½Ä x2 - M y2 = c ÀÇ ÃÖ¼ÒÇظ¦ ¾ò´Â´Ù.
         ´Ù¸¸, M ´Â Æò¹æ¼ö°¡ ¾Æ´Ñ Á¤Á¤¼ö, c = 1, -1.
Çü½Ä
int pellEqu(long *x1, long *y1, long *x2, long *y2, int m);
Àμö
x1, y1  (Ãâ·Â) Æç ¹æÁ¤½Ä  x2 - M y 2 = 1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ
x2, y2  (Ãâ·Â) Æç ¹æÁ¤½Ä  x2 - M y 2 = -1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ
m       (ÀÔ·Â) Æç ¹æÁ¤½ÄÀÇ °è¼ö M (1,4,9,16...ÀÌ¿ÜÀÇ ºñÆò¹æ¼ö)
ÇÔ¼öÄ¡
c = 1 ¶Ç´Â -1 ÀÇ ¾çÂÊ ¸ðµÎ¿¡ ´ëÇÑ ÃÖ¼ÒÇظ¦ ¾òÀ» ¼ö ÀÖ¾úÀ» ¶§´Â 1,
c = -1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ°¡ Á¸ÀçÇÏÁö ¾Ê¾ÒÀ» ¶§´Â 0.
c = 1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇصµ c = 1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇصµ ¾òÀ» ¼ö ¾ø¾úÀ» ¶§´Â -1.
ÁÖÀÇ »çÇ×
Æç ¹æÁ¤½ÄÀÇ ÇØ´Â ¹Ýµå½Ã Á¸ÀçÇÏÁö¸¸, ÇÑÁ¤µÈ Á¤¼ö ¹üÀ§(long Á¤¼ö·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù ¹üÀ§³») ¼Ó¿¡¼­ ÇØ°¡ ¹ß°ßµÇÁö ¾Ê¾ÒÀ» ¶§¿¡´Â, ÇÔ¼öÄ¡´Â -1 µÈ´Ù.

¿ë·Ê(pellEqu-test.c )

ÇÁ·Î±×·¥(pellEqu.c )
int pellEqu(long *x1, long *y1, long *x2, long *y2, int m)
{
    long p0, q0, p1, q1, p, q;
    int  a0, a;
    int  s, t, k;
    
    if (m <= 1) return -1;

    *x1 = *y1 = *x2 = *y2 = 0;
    p0 = 1, q0 = 0;

    /* get m^(1/2) */
    a0 = m, k = 1;               
    while (k < a0) k <<= 1, a0 >>= 1;
    do a0 = k, k = (m / k + k) >> 1; 
    while (k < a0);
    if (a0 * a0 == m) return -1;

    s = 0, t = 1, k = 0;
    p = a = a0, q = 1;
    for ( ; ; ) {
        s = a * t - s;
        t = (m - s*s) /t;
        if (t == 1) break;
        k++;
        a = (a0 + s) / t;
        p1 = p, q1 = q;
        p = a * p + p0;
        q = a * q + q0;
        if (p < 0 || q < 0) return -1;
        p0 = p1, q0 = q1;
    }
    if (k & 1) {
        *x1 = p, *y1 = q;
        return 0;
    } else {
        *x1 = p * p + m * q * q, *y1 = 2 * p * q;
        *x2 = p, *y2 = q;
        return 1;
    }
}
¼³¸í
Æç ¹æÁ¤½Ä(Pell Equation)Àº Á¤¼öÇظ¦ ¿ä±¸ÇÏ´Â ºÎÁ¤ ¹æÁ¤½ÄÀÇ 1Á¾À¸·Î, ÀϹݷÐÀÌ ¿Ï¼ºµÇ°í ÀÖ´Â ¾ó¸¶ ¾ÈµÇ´Â ¹æÁ¤½ÄÀÌ´Ù.

Æç ¹æÁ¤½ÄÀÇ À̸§Àº ³ª-°¡ À߸øÇØ ¸í¸íÇÑ °ÍÀ¸·Î µÇ¾î ÀÖ´Ù. ÆçÀº ½ÇÀçÀÇ ¼öÇÐÀÚÀÌÁö¸¸, ÀÌ ¹æÁ¤½Ä¿¡ ´ëÇÑ ¿¬±¸´Â ÀüÇô ¾ø¾ú´Ù.

Æç ¹æÁ¤½Ä

¡¡¡¡¡¡¡¡x2 - M y2 = c ¡¡(M ´Â Æò¹æ¼ö°¡ ¾Æ´Ñ Á¤Á¤¼ö, c = +1, -1)

¿¡ µÎ¾î, ÀÚ¸íÇÑ ÇØ x = 1, y = 0 ÀÌ¿ÜÀÇ x, y °¡ °¡Àå ÀÛÀº Á¤ÀÇ Á¤¼öÀÌ´Ù Çظ¦, ±× Æç ¹æÁ¤½ÄÀÇ ÃÖ¼ÒÇضó°í ÇÑ´Ù. ¹æÁ¤½ÄÀÇ ¿ìº¯ c = -1 ·Î ÇßÀ» ¶§¿¡´Â ÇØ°¡ ¾ø´Â °æ¿ì°¡ ¸¹Áö¸¸, ±×·¯³ª -1 ¿¡ ´ë ÇÏ´Â ÃÖ¼ÒÇØ°¡ Á¸ÀçÇÏ´Â °æ¿ì¿¡´Â, ¹Ýµå½Ã ±× ÃÖ¼ÒÇØ ÂÊÀÌ +1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ º¸´Ù ÀÛ´Ù.

¿¹¸¦ µé¸é, M = 2 ÀÇ °æ¿ìÀÇ ¹æÁ¤½Ä¿¡ ´ëÇؼ­´Â, x, y ÀÇ Æä¾î (1,1), (3,2), (7,5), (17,12), (41,29), (99,70), (239,169), (577,408)... ÇÏÁö¸¸ ±× ÇØÀÌÁö¸¸, -1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ´Â x=1, y=1 À̸ç,+1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ´Â x=2, y=3 ·Î .

Æç ¹æÁ¤½ÄÀÇ ÀϹÝÇØ´Â ´ÙÀ½ÀÇ Á¡È­½Ä¿¡¼­ ¿ä±¸µÈ´Ù.

¡¡¡¡¡¡¡¡xn+1 = x1xn + M y1yn
¡¡¡¡¡¡¡¡yn+1 = x1yn + y1xn

´Ù¸¸ x1, y1Àº ÃÖ¼ÒÇظ¦ ³ªÅ¸³½´Ù. µû¶ó¼­ Æç ¹æÁ¤½Ä (À»)¸¦ Ç®·Á¸é ±× ÃÖ¼ÒÇظ¦ ¿ä±¸Çϸé ÁÁ´Ù.

M ÀÇ °ª¿¡ ÀÇÇØ, ÃÖ¼ÒÇØ°¡ ÀÇ¿Ü·Î Å« ¼ö°¡ µÇ´Â ÀÏÀÌ ÀÖ´Ù. ¿¹¸¦ µé¸é, M=61, c=1 ¿¡ ´ëÇÑ ÃÖ¼ÒÇØ´Â x=1766319049, y=226153980 ·Îµµ µÈ´Ù.

ÃÖ¼ÒÇØ´Â ´ÙÀ½°ú °°°Ô Á¡È­ÀûÀ¸·Î ¿ä±¸µÈ´Ù.

¡¡¡¡¡¡¡¡s0 = 0¡¡¡¡t0 = 1
¡¡¡¡¡¡¡¡a0 = M1/2 ÀÇ Á¤¼öºÎ
¡¡¡¡¡¡¡¡x-1 = 1¡¡¡¡y-1 = 0¡¡¡¡x0 = a0¡¡¡¡y0 = 1
¡¡¡¡¡¡¡¡sk+1 = aktk - sk¡¡¡¡ tk+1 = (M - sk+12) / tk
¡¡¡¡¡¡¡¡ak+1 = (a0 + sk+1) / tk+1ÀÇ Á¤¼öºÎ
¡¡¡¡¡¡¡¡xk+1 = ak+1 xk + xk-1 ¡¡¡¡yk+1 = ak+1 yk + yk-1

tk+1ÀÇ °ªÀÌ 1 ÀÌ µÇ¾úÀ» ¶§ÀÇ, xk, ykÀÇ °ª ÇÏÁö¸¸ Æç ¹æÁ¤½ÄÀÇ ÃÖ¼ÒÄ¡°¡ µÈ´Ù.

°ü·Ã ÇÔ¼ö
Æò¹æ±ÙÀÇ °è»ê