- ÇÔ¼ö¸í
mpMul ´Ù¹èÀå Á¤¼ö³¢¸®ÀÇ °ö¼À
- Çü½Ä
void mpMul(int *ret, int *a, int *b);
- Àμö
ret (Ãâ·Â) ´Ù¹èÀå Á¤¼ö³¢¸®ÀÇ °ö¼ÀÀÇ °á°ú(a * b)
a, b (ÀÔ·Â) ´Ù¹èÀå Á¤¼ö
- ÇÔ¼öÄ¡
¾øÀ½
- ÁÖÀÇ »çÇ×
- ¹è¿ÀÇ °¢ ¿ä¼Ò ai(i ´Â 1 ÀÌ»ó)´Â 1¾î¸¦ ³ªÅ¸³»,
1¾î·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â ÃÖ´ëÀÇ Á¤¼ö´Â 9999 ·Î ÇÑ´Ù. ¸»ÀÇ ±æÀÌ´Â a0
ÀÇ °ªÀ¸·Î ³ªÅ¸³½´Ù. Áï, ´Ù¹èÀå Á¤¼ö´Â
anKn-1+
an-1Kn-2+...+a2K+
a1
±×¸®°í Ç¥ÇöÇÑ´Ù. ´Ù¸¸, K=10000, n=a0.
- ¿ë·Ê(mpMul-test.c )
- ÇÁ·Î±×·¥(mpMul.c )
#define N 10000
void mpMul(int *ret, int *a, int *b)
{
int i, j;
int la, lb;
int *aa;
int ca = 1;
long x;
la = *a;
lb = *b;
for (i = la + lb; i > 0; i--) *(ret + i) = 0;
for (j = 1; j <= lb; j++) {
ca = 0;
for (i = 1, aa = a; i <= la; i++) {
x = *++aa;
x = x * *++b + *(ret + i + j - 1) + ca;
*(ret + i + j - 1) = x % N;
ca = x / N;
}
*(ret + i + j - 1) = ca;
}
*ret = (ca ! = 0) ? la + lb : la + lb - 1;
}
- ¼³¸í
- °ö¼ÀÀº °¡°¨(»óÅÂ)»ê¸¸Å ´Ü¼øÇÏÁö ¾Ê°í, ¿©·¯ °¡Áö ±Ã¸®ÀÇ ¿©Áö°¡ ÀÖ´Ù. ½Ç¿ë»ó
¶Ç´Â À̷лóÀÇ °üÁ¡À¸·ÎºÎÅÍ Èï¹Ì·Î¿î ¹æ¹ýÀ» ¾ó¸¶µçÁö »ý°¢µÇ°í ÀÖ´Ù.
°ö¼À¿¡ ´ëÇØ »ý°¢ÇÏÀÚ. a, b¸¦ °¢°¢ m, n¾î·Î Çϸé(ÀÚ), Àûc=a*b´Â m+n
¸»ÀÌÇÏ°¡ µÈ´Ù. Åë»óÀÇ ÇÊ»ê°ú °°Àº ¹æ¹ýÀ¸·Î, ½Â¼ö bÀÇ 1¾î ¸¶´Ù¸¦ a¿¡ °É¾î
±×·¯ÇÑ È´Â Àûc°¡ µÈ´Ù.
ÀÌ ¹æ¹ý¿¡¼´Â, bÀÇ n¾î¸¦ °¢°¢ aÀÇ m¾î¿¡ °É¹Ç·Î, m*nȸÀÇ ¹Ýº¹
µÈ´Ù. µû¶ó¼, °è»ê¿¡ ÇÊ¿äÇÑ ½Ã°£Àº O(mn)ÀÌ´Ù.
- °ü·Ã ÇÔ¼ö
-
´Ù¹èÀå Á¤¼öÀÇ °¡»ê,
´Ù¹èÀå Á¤¼öÀÇ °¨»ê,
´Ù¹èÀå Á¤¼öÀÇ Á¦»ê,
´Ù¹èÀå Á¤¼öÀÇ Æò¹æ±Ù,
´Ù¹èÀå Á¤¼öÀÇ ´ë¼Ò ºñ±³,
¼ö¿À» ´Ù¹èÀå Á¤¼ö·Î º¯È¯ÇÏ´Â,
´Ù¹èÀå Á¤¼ö¸¦ ¼ö¿·Î º¯È¯ÇÏ´Â,
long Á¤¼ö¸¦ ´Ù¹èÀå Á¤¼ö·Î º¯È¯ÇÏ´Â,
´Ù¹èÀå Á¤¼ö¸¦ long Á¤¼ö·Î º¯È¯ÇÑ´Ù