Szybkie potęgowanie iteracyjnie - zliczenie ilości mnożen

0

Mam problem ze zliczeniem ilosci mnozen w szybkim potęgowaniu iteracyjnym.
Dla np 2^4 powinno wyswietlac "ilosc mnozen: 2, a wyswietla 3. Gdzie tkwi problem?

#include<iostream>
 
using namespace std;
 
long long potegowanie(long long p, unsigned int w) // p-podstawa, w-wykladnik
{
    long long x = 1;
    int i=0;
 
    while(w>0)
    {
 
        if (w%2 == 1)
            x *= p;
 
        p*= p;
 
        w/=2; 
        i++;
    }
    cout<<"Liczba mnozen: "<<i<<endl;
    return x;
 
}
 
int main()
{
 
    long long p;
    unsigned int w;
    cin>>p>>w;
 
    cout<<potegowanie(p, w)<<endl;
 
    return 0;
}

0

Ale dlaczego wg Ciebie ma być 2? Przecież dla takiego prostego przykładu możesz sobie to sam przeanalizować.
Wchodzisz do pętli

  1. dla w = 4, w = 4/2 - robisz i++ - w wynosi 2
  2. dla w = 2, w = 2/2 - robisz i++ - w wynosi 1
  3. dla w = 1, w = 1/2 - robisz i++ - tutaj i wynosi 3.
0

W szybkim potęgowaniu 2^4 ilosc mnozen nie powinna wynosic 2?
2^4= 2^22^2 (1),
2^2=2^1
2^1 (1),
(1)+(1) = 2?

1 użytkowników online, w tym zalogowanych: 0, gości: 1