function c = FastExpSym(a,b,n)
% c = FastExpSym(a,b,n)
% Modification of my ModInv function (using my gcdSym function) that
% has symbolic functionality.
% Input: a, b, < n positive integers, n = the modulus
% Output: c = a^b (mod n)
% Program uses the fast exponentiation method to calculate c = a^b (mod n).
% Beginning with factor = a^1:
% on each pass, it is determined whether this is a desired factor. If so, then
% it is multiplied into a variable containing a cumulative product of desired
% factors. Then the factor is squared, and the process repeated.
exp = b;
c = ones(size(a));
factor = a;
while(exp ~= 0)
if (mod(exp,2) == 1)
c = mod(c .* factor,n);
end
exp = floor(exp/2);
factor = mod(factor.*factor,n);
end