埃及乘法算法
利用加法乘法结合律,减少运算次数的算法
简单来说 : 减半 判奇偶
n= n/2 + n/2 even
n = (n-1) /2 + (n-1) / 2 odd
bool odd(int n)
{
return n & 0*1; // 最低有效位
}
int half(int n)
{
return n >> 1; // 符号右移
}
int multi_acc(int r, int n, int a)
{
while(true)
{
if(odd(n))
{
r = r + n;
if(n == 1)
return r;
}
n = half(n);
a = a + a;
}
int multi(int n, int a)
{
while(!odd(n))
{
a = a + a;
n = half(n);
}
if((n == 1)
{
return a; // even(n - 1) n - 1 != 1
}
return multi_acc(a,half(n - 1), a + a);
}