Cod sursa(job #2333586)

Utilizator Leonard123Mirt Leonard Leonard123 Data 1 februarie 2019 14:51:26
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb

#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("lgput.in");
ofstream fout("lgput.out");


int putere(long long a, int b, int c){
    long long a1=a, r, i;
    int v[100000];
    v[0]=b;
    if(b==0){
        return 1;
    }

    for(i=1; b!=1; i++){
        if(b%2==0){
            b/=2;
            v[i]=b;
            }
        else {
            b-=1;
            v[i]=b;
        }
    }
    i-=2;
    while(i>=0){
        if(v[i]%2!=0){
            a*=a1;
        }else{
            a*=a;
        }
          a%=c;
        i--;
    }
    r=a%c;
    return r;
}
int main(){
    int b,c=1999999973;
    long long a;
    fin>>a>>b;
    fout<<putere(a,b,c);
    return 0;
}