Cod sursa(job #2128090)

Utilizator AndreiStanescuAlloys Nokito AndreiStanescu Data 11 februarie 2018 13:59:22
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
//range mininum query
/*#include<stdio.h>
#include<iostream>
#include<vector>
#define N 100002
#define Dim 0x3f3f3f3f
using namespace std;

long int a[N],v[N],t,n,m;


int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    long int i,j,x,y,s,d;
    scanf("%ld\n%ld",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(t=0;t*t<n;t++);
    for(i=1;t*i<=n;i++)
    {
        v[i]=Dim;
        for(j=t*(i-1)+1;j<=t*i;j++)
            v[i]=min(v[i],a[j]);
    }
    for(i=1;i<=m;i++)
    {
        long int ans;
        ans=Dim;
        scanf("%d %d",&x,&y);
        for(j=1;j*t<x;j++);
        s=min(t*j,y);
        j++;
        for(;j*t<=y;j++)
            ans=min(ans,v[j]);
        d=max((j-1)*t,x);
        for(j=x;j<=s;j++)
            ans=min(ans,a[j]);
        for(j=d;j<=y;j++)
            ans=min(ans,a[j]);
        printf("%d\n",ans);

    }


}*/

//exponentiere rapida in O(logP)

#include<bits/stdc++.h>
using namespace std;

const int N=10001;
const int mod=1999999973;

int main()
{
    unsigned int i,n,p;
    long long ans,sol=1;
    freopen("lgput.in","r",stdin);
    freopen("lgput.out","w",stdout);
    scanf("%d%d",&n,&p);
    ans=n;
    for(i=0;(1<<i)<=p;i++)
    {
        if( ( (1<<i) & p) ==(1<<i))
            sol=(sol*ans)%mod;
        ans=(ans*ans)%mod;
    }
    printf("%d",sol);
}