Cod sursa(job #1516589)
Utilizator | Iorgulescu Matei matei1404014 | Data | 3 noiembrie 2015 10:55:34 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.68 kb |
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
long long expo(long long a, long long b)
{
long long result = 1;
while (b)
{
if (b&1)
{
result=result*a%1000000009;
}
b >>=1 ;
a=a*a%1000000009;
}
return result;
}
int main()
{
freopen ("lgput.in","r",stdin);
freopen ("lgput.out","w",stdout);
long long n,b;
scanf("%lld",&n);
if(n%2==0)
{
b=expo(n,n/2);
printf("%lld",expo(b,n+1));
}
else
{
b=expo(n,(n+1)/2);
printf("%lld",expo(b,n));
}
return 0;
}