Cod sursa(job #601368)

Utilizator mavroMavrodin Bogdan-Florentin mavro Data 6 iulie 2011 01:31:59
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#define mod 1999999973

int bin[100], l;

void binar(int p)
{
    l = 0;
    while(p != 0)
    {
        bin[l++] = p % 2;
        p = p / 2;
    }
}

long long putere(int n, int p)
{
    int i;
    if(p == 0)
        return 1;
    if(p == 1)
        return n;
    long long r = n;
    for(i = l-2; i >= 0; i--)
    {
        if(bin[i] == 1)
            r = (r * r  * n);
        else
            r = (r * r);
       // printf("%d. %d r = %d\n", l - i - 1, bin[i], r);
    }
    return r;
}

int main()
{
    freopen("lgput.in", "r", stdin);
    freopen("lgput.out", "w", stdout);

    int n, p;

    scanf("%d %d", &n, &p);

    binar(p);
    printf("%lld", putere(n, p));


    binar(p);

    return 0;
}