Pagini recente » Cod sursa (job #522875) | Cod sursa (job #1622653) | Cod sursa (job #3289860) | Cod sursa (job #980875) | Cod sursa (job #2535259)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lgput.in");
ofstream g("lgput.out");
unsigned long long exp(long long x,long long n){
if(n==0)return 1;
long long y=1;
while(n>1){
if(n%2==0){
x=x*x;
n=n/2;
}
else{
y=x*y;
x=x*x;
n=(n-1)/2;
}
}
return x*y;
}
int main()
{
int m=1999999973;
int i=1;
long long n,p,sol=1,a;
f>>n>>p;
a=n;
a = n;
for (i = 0; (1<<i) <= p; ++ i) // Luam toti biti lui p la rand
{
if ( ((1<<i) & p) > 0) // Daca bitul i din p este 1 atunci adaugam n^(2^i) la solutie
sol= (sol * a) % m;
a=(a * a) % m; // Inmultim a cu a ca sa obtinem n^(2^(i+1))
}
g<<sol;
return 0;
}