Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exponentiation program

Tags:

algorithm

I am trying to do a fast exponentiation. But the result does not seem to produce the correct result. Any help would be appreciated. EDIT: Manage to solve it thanks for all the help.

        if (content[i] == '1')
            s1 = (int)(po1 * (Math.pow(po1, 2)));
        else
            s1 = po1 * po1;
        final_result *= temp;

1 Answers

Check out this Exponation by squaring

You probably want to bit-shift right and square your base each time you encounter a 1 bit in the exponent

int pow(int base, int e)
{
    int retVal = 1;
    while (e)
    {
        if (e % 2 == 1)//i.e. last bit of exponent is 1
            retVal *= base;
        e >>= 1; //bitshift exponent to the right.
        base *= base; // square base since we shifted 1 bit in our exponent
    }

    return retVal ;
}

A good way of thinking about it is that your exponent is being broken down: say, 6^7 (exponent in bits is 1, 1, 1) = 6^1 * 6^2 * 6^4 = 6 * 36 * 36^2 = 6 * 36 * 1296. Your base is always squaring itself.

like image 51
Ajk_P Avatar answered Dec 08 '25 15:12

Ajk_P



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!