¼Ò¼öÀÇ ÆÇÁ¤(Lucas Å×½ºÆ®)


ÇÔ¼ö¸í
lucas  ¸Þ¸£¼¾´©(Mersenne) ¼ö°¡ ¼Ò¼öÀÏÁö ¾î¶³Áö¸¦ ÆÇÁ¤ÇÑ´Ù
Çü½Ä
int lucas(int p);
Àμö
p  ¸Þ¸£¼¾´©¼ö¿¡ À־ÀÇ ¼Ò¼ö
ÇÔ¼öÄ¡
¼Ò¼ö¶ó¸é 1, ºñ¼Ò¼ö(Áï, ÇÕ¼º¼ö)¶ó¸é 0, ³»ºÎ ¿¡·¯°¡ ÀϾ´Ù
¶§´Â -1.
ÁÖÀÇ »çÇ×

¿ë·Ê(lucas-test.c )
lucas(3217);

ÇÁ·Î±×·¥(lucas.c )
int lucas(int p)
{
    char *l, *m;
    char *lp, *mp1, *mp2;
    int  i, j, k;
    int  ca, x;
    int  ret = 1;

    if (p <= 0) return 0;
    if (p <= 2) return 1;

    if ((l = (char *) malloc(p)) == NULL) return -1;
    if ((m = (char *) malloc(p)) == NULL) {
        free(l);
        return -1;
    }

    for (lp = l + p; lp ! = l; ) *--lp = 0;
    *(l+2) = 1;                                     /* L(1) = 4 */

    for (i = 2; i < p; i++) {
        for (lp = l + p, mp1 = m + p; lp ! = l; ) {
            *--mp1 = *--lp;
            *lp = 1;                        /* 2^p -1 mod 2^p -1 = 0 */
        }

        *(l+1) = 0;                                 /* L(i) = L(i) - 2 */
        for (mp1 = m, j = 0; j < p; j++) {
            if (*mp1++) {                           /* this bit is 1 */
                ca = 0;
                k = j;
                for (mp2 = m; mp2 ! = m + p; ) {     /* L(i) * L(i) */
                    x = *mp2++ + *(l+k) + ca;
                    *(l+k) = x & 1;
                    ca = x >> 1;
                    if (++k == p) k = 0;
                }
                if (ca) {
                    while (*(l+k)) {
                        *(l+k) = 0;
                        if (++k == p) k = 0;
                    }
                    *(l+k) = 1;
                }
            }
        }
    }

    x = *l;
    for (lp = l + p; lp ! = l; )               /* L(p-1) == all 0 or 1 ?  */
        if (*--lp ! = x) {
            ret = 0;
            break;
        }

    free(m);
    free(l);
    return ret;
}
¼³¸í
Mp = 2p - 1(p ´Â ¼Ò¼ö) ÀÇ ÇüÅÂÀÇ ¼ö¸¦ ¸Þ¸£¼¾´© (Mersenne) ¼ö¶ó°í ÇÑ´Ù. p °¡ 2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279, 2203, 2281, 3217, 4253, 4423, 9689, 9941, 11213, 19937, 21701, 23209, 44497, 86243, 110503, 132049, 216091, 756839, 859433 ¶§ Mp ´Â ¼Ò¼ö ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖ°í ÀÖ´Ù. µ¡ºÙ¿©¼­ M859433 (Àº)´Â 10 Áø¼ö·Î ¾à 26¸¸ ÀÚ¸®¼öÀÇ ¼öÀ̸ç, 1994³â 1¿ù¿¡ ÀÌÇÏÀÇ Lucas Å×½ºÆ®¿¡ ÀÇÇØ ¹ß°ßµÈ °Å´ë ¼Ò¼öÀÌ´Ù.

Lucas Å×½ºÆ®¿Í´Â, ·çÄ«½º (Lucas)°¡ 1876³â¿¡ ¹ß°ßÇÑ °ÍÀ¸·Î, ¸Þ¸£¼¾´©¼ö°¡ ¼Ò¼öÀΰ¡ ¾î¶²°¡¸¦ °£´ÜÇÏ°Ô ÆÇÁ¤ÇÒ ¼ö ÀÖ´Ù.

¡¡¡¡¡¡L0 = 4, Li+i = (Li2 - 2) mod (2p - 1)

±×¸®°í,Lp-1 °¡ 0 À̶ó¸é Mp (Àº)´Â ¼Ò¼ö, 0 À̿ܶó¸é ºñ¼Ò¼öÀÌ´Ù.

Lucas Å×½ºÆ®ÀÇ ´öºÐ¿¡, ÄÄÇ»ÅÍÀÇ Èû¿¡ ÀÇÇÑ ¼Ò¼öÀÇ ¹ß°ß °æÀïÀº, ¾ÕÀ¸·Îµµ °è¼ÓµÇ¾î ±â·ÏÀº ¹Ù²ã¹Ù¸¦ ¼ö ÀÖ¾î °¥ °ÍÀÌ´Ù.

±×·¯³ª,¥ðÀÇ ±Ù»çÄ¡´Â 20¾ï ÀÚ¸´¼ö±îÁö °è»êµÇ°í Àֱ⠶§¹®¿¡, °íÀÛ 26¸¸ ÀÚ¸®¼öÀÇ ¼Ò¼ö´Â ±²ÀåÇÑ ÀÏÀÌ ¾Æ´Ï´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.

µ¡ºÙ¿©¼­, ÇöÀç »ç¿ëµÇ°í ÀÖ´Â ÃÖ´ëÀÇ ¼Ò¼öÇ¥´Â
¡¡¡¡¡¡¡¡Lehmer, D. H. Guide to Tables in the Theory of Numbers, 1941
±×¸®°í, 10006721 ±îÁöÀÇ, 665000 °³ÀÇ ¼Ò¼ö°¡ ¿À¸£°í ÀÖ´Ù.

°ü·Ã ÇÔ¼ö