n^pを見つけるためのアルゴリズムは次のとおりです。
unsigned long long power(unsigned n, unsigned p)
{
unsigned long long x=1, y=n;
while(p > 0)
{
if(p&1) x *= y;
y *= y;
p >>= 1;
}
return x;
}
誰かがこのアルゴリズムの背後にある論理/数学を説明できますか? 私はそれが機能することを知っており、いくつかのテストケース(ドライラン)でうまくいきました。それがどのように機能し、一般的な素朴な方法からどのように効率的であるかを意味します。