using
System;
class
GFG
{
public
class
pair
{
public
int
first, second;
public
pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
static
pair Multiply (pair p, pair q,
int
M)
{
int
x = ((p.first * q.first) % M -
(p.second * q.second) % M + M) % M;
int
y = ((p.first * q.second) % M +
(p.second * q.first) % M) % M;
return
new
pair(x, y);
}
static
pair compPow(pair complex,
int
k,
int
M)
{
pair res =
new
pair(1, 0 );
while
(k > 0)
{
if
(k % 2 == 1)
{
res = Multiply(res, complex, M);
}
complex = Multiply(complex, complex, M);
k = k >> 1;
}
return
res;
}
public
static
void
Main(String[] args)
{
int
A = 7, B = 3, k = 10, M = 97;
pair ans = compPow(
new
pair(A, B), k, M);
Console.WriteLine(ans.first +
" + i"
+
ans.second);
}
}