#include <stdio.h>
//求 (val1_in * val2_in) % modVal_in
int mulMod(int val1_in, int val2_in, int modVal_in)
{
return (val1_in % modVal_in) * (val2_in % modVal_in) % modVal_in;
}
//求 (val1_in^val2_in) mod modVal_in
int powMod(int val1_in, int val2_in, int modVal_in)
{
int ret = 1;
while(val2_in)
{
while(!(val2_in&1))
{
val2_in >>= 1;
val1_in = mulMod(val1_in, val1_in, modVal_in);
}
val2_in--;
ret = mulMod(val1_in, ret, modVal_in);
}
return ret;
}
int main(int argc, char *argv[])
{
//printf("%d\n", mulMod(2, 3, 7));
printf("%d\n", powMod(2, 500, 300));
return 0;
}
//求 (val1_in * val2_in) % modVal_in
int mulMod(int val1_in, int val2_in, int modVal_in)
{
return (val1_in % modVal_in) * (val2_in % modVal_in) % modVal_in;
}
//求 (val1_in^val2_in) mod modVal_in
int powMod(int val1_in, int val2_in, int modVal_in)
{
int ret = 1;
while(val2_in)
{
while(!(val2_in&1))
{
val2_in >>= 1;
val1_in = mulMod(val1_in, val1_in, modVal_in);
}
val2_in--;
ret = mulMod(val1_in, ret, modVal_in);
}
return ret;
}
int main(int argc, char *argv[])
{
//printf("%d\n", mulMod(2, 3, 7));
printf("%d\n", powMod(2, 500, 300));
return 0;
}