#include <stdio.h>
#include <stdint.h>
int square_and_multiply(unsigned long long a, unsigned long long k, unsigned long long n)
{
int result = 1;
while (k > 0)
{
if (k % 2 == 1)
{
result = (result * a) % n;
}
k /= 2;
a = (a * a) % n;
}
return result;
}
int main()
{
unsigned long long a, k, n;
unsigned long long result = square_and_multiply(a, k, n);
printf("a^k mod n = %llu\n", result
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCmludCBzcXVhcmVfYW5kX211bHRpcGx5KHVuc2lnbmVkIGxvbmcgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGxvbmcgaywgdW5zaWduZWQgbG9uZyBsb25nIG4pCnsKICAgIGludCAgcmVzdWx0ID0gMTsKICAgIHdoaWxlIChrID4gMCkKICAgIHsKICAgICAgICBpZiAoayAlIDIgPT0gMSkgCiAgICAgICAgewogICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0ICogYSkgJSBuOyAKICAgICAgICB9CiAgICAgICAgayAvPSAyOwogICAgICAgIGEgPSAoYSAqIGEpICUgbjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkKewogICAgdW5zaWduZWQgbG9uZyBsb25nIGEsIGssIG47CiAgICBwcmludGYoIk5oYXAgZ2lhIHRyaSBhOiAiKTsKICAgIHNjYW5mKCIlbGx1IiwgJmEpOwogICAgcHJpbnRmKCJOaGFwIGdpYSB0cmkgazogIik7CiAgICBzY2FuZigiJWxsdSIsICZrKTsKICAgIHByaW50ZigiTmhhcCBnaWEgdHJpIG46ICIpOwogICAgc2NhbmYoIiVsbHUiLCAmbik7CgogICAgdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdCA9IHNxdWFyZV9hbmRfbXVsdGlwbHkoYSwgaywgbik7CiAgICBwcmludGYoImFeayBtb2QgbiA9ICVsbHVcbiIsIHJlc3VsdCk7CgogICAgcmV0dXJuIDA7Cn0=