快速幂和乘法
unsigned long long pow1(int x, int n)
{
unsigned long long r = 1;
while (n--)r *= x;
return r;
}
//二分快速幂
unsigned long long pow2(int x, int n)
{
unsigned long long r = 1, base = x;
while (n)
{
if (n & 1)r *= base; // 如果是奇数
base *= base;
n >>= 1;
}
return r;
}
//二分快速乘法
unsigned long long mult(int x, int n)
{
unsigned long long r = 0, base = x;
while (n)
{
if (n & 1)r += base;
cout <<n<<" " << (n&1)<<" "<< base<<" "<<r << endl;
base += base;
n >>= 1;
}
return r;
}