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 °³ÀÇ ¼Ò¼ö°¡ ¿À¸£°í ÀÖ´Ù.