Optimise Division function using divide and conquer, (and multiplication only)
Before optimising your code, it is probably a good idea to write a few tests to ensure you don't break anything as you go. There is something quite good in your situation : your code is supposedly easy to test as you know the mathematical properties that your result should have : a = b * q + r with 0 &lt;= r &lt; b.

Writing something like :

std::cout &lt;&lt; "j" &lt;&lt; "*" &lt;&lt; "q" &lt;&lt; "+" &lt;&lt; "r" &lt;&lt; " = " &lt;&lt; "t" &lt;&lt; " (" &lt;&lt; "i" &lt;&lt; ")" &lt;&lt; std::endl;
for (uint i = 2; i &lt; 10; i++)
    for (uint j = 2; j &lt; 10; j++)
    {
        uint q = 0;
        uint r = 0;
        DivisionDivideAndConquer(i, j, q, r);
        uint total = j * q + r;
        if (total != i)
                std::cout &lt;&lt; j &lt;&lt; "*" &lt;&lt; q &lt;&lt; "+" &lt;&lt; r &lt;&lt; " = " &lt;&lt; total &lt;&lt; " (" &lt;&lt; i &lt;&lt; ")" &lt;&lt; std::endl;
    }


shows that there is something wrong in your result which is the first problem (Hint: the problem is in the shortcut). Trying to perform tests with j starting from 1 shows that there is another issue (Hint: a loop does not finish).

Actual optimisation

Think about the cases you are trying to handle or how you are trying to reduce the search range.

With the following code, you compute less in each iteration while making the search range smaller :

    // if too small then we have a new max
    if (possibleremainder &lt; 0) {
        max = number - 1;
    }
    // too big we have a new min
    else if(possibleremainder &gt;= static_cast&lt;int&gt;(den) )
    {
        min = number + 1;
    }
    else
    {
        //  got it!
        quo = number;
        rem = static_cast&lt;uint&gt;(possibleremainder);
        break;
    }