Алгоритм Карацубы в C ++ - PullRequest
0 голосов
/ 21 июня 2020

Я реализовал алгоритм умножения карацубы на C ++. Я хочу оптимизировать его, чтобы умножить два 64-значных числа. Кто-нибудь может помочь, пожалуйста? Спасибо :)

int Karatsuba::count(long long int a)
{
    ostringstream str1; 
    str1 << a; 
    string s = str1.str(); 
    return s.length();
}
long long int Karatsuba::multiply(long long int x, long long int y)
{
    if(x / 10 == 0 || y / 10 == 0)
        return x*y;
    else
    {
        int n = count(x);
        long long int n2 = (long)pow(10, n/2);
        
        long long int a = x / n2;
        long long int b = x % n2;
        long long int c = y / n2;
        long long int d = y % n2;
        
        long long int ac = multiply(a,c);
        long long int bd = multiply(b,d);
        long long int step3 = multiply((a+b), (c+d));
        
        return (pow(10, n)*ac) + (n2*(step3 - ac - bd)) + bd;
    }
}
...