Cod sursa(job #2699391)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 24 ianuarie 2021 13:10:15
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

#define MOD 1999999973

using namespace std;

ifstream fin("lgput.in");
ofstream fout("lgput.out");

int n, m, k, s;

int factorial[100100];

int lgput(int base, int exp)
{
    int aux = base, ans = 1;
    for(int i = 1; i <= exp; i *= 2)
    {
        if(exp & i)
        {
            ans *= aux;
            ans %= MOD;
        }
        aux *= aux;
        aux %= MOD;
    }
    return ans;
}

void precalc()
{
    factorial[0] = 1;
    for(int i = 1; i <= 100000; i ++)
    {
        factorial[i] = factorial[i-1] * i;
        factorial[i] %= MOD;
    }
}

int combinari(int n,int k)
{
    return (((factorial[n] * lgput(factorial[k], MOD - 2)) % MOD) * lgput(factorial[n-k], MOD - 2)) % MOD;
}

int main()
{
    int n, p;
    fin >> n >> p;
    fout << lgput(n,p);
    /*cin >> n >> m >> k >> s;
    if(k < s)
    {
        cout << 0 << '\n';
        return 0;
    }
    precalc();
    cout << combinari(4,2) <<  '\n';
    int ans = 0;
    for(int i = s; i <= k; i ++)
    {
        ans += combinari(m,i) * combinari(nn,k-i);
        ans %= MOD;
    }
    cout << ans << '\n';*/
}