lucas ¸Þ¸£¼¾´©(Mersenne) ¼ö°¡ ¼Ò¼öÀÏÁö ¾î¶³Áö¸¦ ÆÇÁ¤ÇÑ´Ù
int lucas(int p);
p ¸Þ¸£¼¾´©¼ö¿¡ ÀÖ¾î¼ÀÇ ¼Ò¼ö
¼Ò¼ö¶ó¸é 1, ºñ¼Ò¼ö(Áï, ÇÕ¼º¼ö)¶ó¸é 0, ³»ºÎ ¿¡·¯°¡ ÀϾ´Ù ¶§´Â -1.
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; }
Lucas Å×½ºÆ®¿Í´Â, ·çÄ«½º (Lucas)°¡ 1876³â¿¡ ¹ß°ßÇÑ °ÍÀ¸·Î, ¸Þ¸£¼¾´©¼ö°¡ ¼Ò¼öÀΰ¡ ¾î¶²°¡¸¦ °£´ÜÇÏ°Ô ÆÇÁ¤ÇÒ ¼ö ÀÖ´Ù.
¡¡¡¡¡¡
±×¸®°í, °¡ 0 À̶ó¸é (Àº)´Â ¼Ò¼ö, 0 À̿ܶó¸é ºñ¼Ò¼öÀÌ´Ù.
Lucas Å×½ºÆ®ÀÇ ´öºÐ¿¡, ÄÄÇ»ÅÍÀÇ Èû¿¡ ÀÇÇÑ ¼Ò¼öÀÇ ¹ß°ß °æÀïÀº, ¾ÕÀ¸·Îµµ °è¼ÓµÇ¾î ±â·ÏÀº ¹Ù²ã¹Ù¸¦ ¼ö ÀÖ¾î °¥ °ÍÀÌ´Ù.
±×·¯³ª,¥ðÀÇ ±Ù»çÄ¡´Â 20¾ï ÀÚ¸´¼ö±îÁö °è»êµÇ°í Àֱ⠶§¹®¿¡, °íÀÛ 26¸¸ ÀÚ¸®¼öÀÇ ¼Ò¼ö´Â ±²ÀåÇÑ ÀÏÀÌ ¾Æ´Ï´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.
µ¡ºÙ¿©¼, ÇöÀç »ç¿ëµÇ°í ÀÖ´Â ÃÖ´ëÀÇ ¼Ò¼öÇ¥´Â
¡¡¡¡¡¡¡¡Lehmer, D. H. Guide to Tables in the Theory of Numbers, 1941
±×¸®°í, 10006721 ±îÁöÀÇ, 665000 °³ÀÇ ¼Ò¼ö°¡ ¿À¸£°í ÀÖ´Ù.