Разделение ваших чисел таким образом является идеальной предпосылкой для умножения Карацубы .Подумайте:
x = x1 * 2^k + x2
y = y1 * 2^k + y2
Используя школьное умножение, вам потребуется 4 умножения:
x*y = (x1*y1) * 2^(2*k) + (x1*y2 + x2*y1) * 2^k + x2*y2
Карацубе нужно еще несколько дополнений, но только 3 умножения:
p1 = x1 * y1
p2 = x2 * y2
x*y = p1 * 2^(2*k) + ((x1+x2)*(y1+y2) - p1 - p2) * 2^k + p2
Конечно, проблема в том, как бороться с переполнением.