Pagini recente » Cod sursa (job #2091118) | Cod sursa (job #2576060) | Cod sursa (job #1129345) | Cod sursa (job #1775626) | Cod sursa (job #1601662)
#include <iostream> //PUTERE < POW < LGPOW -> numere mici
#include <cstdio> //PUTERE < LGPOW < pow -> numere mari ( pow nu face %Mod)
#include <ctime>
#include <cmath>
#define Mod 1999999973
using namespace std;
long long b,pw;
//long long lgpow(long long b,long long pw);
//void testareTimpiEx();
long long Putere(long long b, long long pw);
int main()
{
freopen("lgput.in","rt",stdin);
freopen("lgput.out","wt",stdout);
scanf("%ld%ld", &b, &pw);
cout<<Putere(b, pw)<<'\n';
//cout<<lgpow(b, pw)<<'\n';
}
long long Putere(long long b, long long pw)
{
long long rez = 1;
while(pw>0)
{
if(pw & 1) //putere impara
{
rez = (rez * b) % Mod;
pw--; //puterea redevine para
}
b = (b * b) % Mod;
pw = pw >> 1; //puterea se injumatateste
}
return rez;
}
/*
void testareTimpiEx()
{
int k,k1;
clock_t t ;
int test[]= {200000,500000,1500000,2000000};
for(int j=0; j<4; j++)
{
printf("nr=%d\n",test[j]);
t= clock();
for(int i=1; i<=test[j]; i++) //
{
b=2;
pw=30;
k1=pow(b,pw);
}
t = clock() - t;
printf("Time used: %lf seconds for pow \n",((double)t)/CLOCKS_PER_SEC);
t = clock();
for(int i=1; i<=test[j] ; i++) //
{
b=2;
pw=30;
k=lgpow(b,pw);
}
t = clock() -t;
printf("Time used: %lf seconds for lgpow\n",((double)t)/CLOCKS_PER_SEC);
t= clock();
for(int i=1; i<=test[j]; i++) //
{
b=2;
pw=30;
k1=Putere(b,pw);
}
t = clock() - t;
printf("Time used: %lf seconds for putere \n",((double)t)/CLOCKS_PER_SEC);
}
}
long long lgpow(long long b,long long pw)
{
if(pw == 1)
return b;
long long p = lgpow(b, pw/2) % Mod;
return (((p * p) % Mod) * (pw % 2 ? b : 1)) % Mod;
}*/