mpMul ´Ù¹èÀå Á¤¼ö³¢¸®ÀÇ °ö¼À
void mpMul(int *ret, int *a, int *b);
ret (Ãâ·Â) ´Ù¹èÀå Á¤¼ö³¢¸®ÀÇ °ö¼ÀÀÇ °á°ú(a * b) a, b (ÀÔ·Â) ´Ù¹èÀå Á¤¼ö
¾øÀ½
#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;
}
ÀÌ ¹æ¹ý¿¡¼´Â, bÀÇ n¾î¸¦ °¢°¢ aÀÇ m¾î¿¡ °É¹Ç·Î, m*nȸÀÇ ¹Ýº¹ µÈ´Ù. µû¶ó¼, °è»ê¿¡ ÇÊ¿äÇÑ ½Ã°£Àº O(mn)ÀÌ´Ù.