function value = i4_gcdb ( i, j, k )
%*****************************************************************************80
%
%% i4_gcdb() finds the greatest common divisor of the form K^N of two numbers.
%
% Discussion:
%
% Note that if J is negative, I4_GCDB will also be negative.
% This is because it is likely that the caller is forming
% the fraction I/J, and so any minus sign should be
% factored out of J.
%
% If I and J are both zero, I4_GCDB is returned as 1.
%
% If I is zero and J is not, I4_GCDB is returned as J,
% and vice versa.
%
% If I and J are nonzero, and have no common divisor of the
% form K^N, I4_GCDB is returned as 1.
%
% Otherwise, I4_GCDB is returned as the largest common divisor
% of the form K^N shared by I and J.
%
% Licensing:
%
% This code is distributed under the GNU LGPL license.
%
% Modified:
%
% 19 April 2005
%
% Author:
%
% John Burkardt
%
% Input:
%
% integer I, J, two numbers whose greatest common divisor K^N
% is desired.
%
% integer K, the possible divisor of I and J.
%
% Output:
%
% integer VALUE, the greatest common divisor of
% the form K^N shared by I and J.
%
value = 1;
%
% If both I and J are zero, I4_GCDB is 1.
%
if ( i == 0 && j == 0 )
value = 1;
return
end
%
% If just one of I and J is zero, I4_GCDB is the other one.
%
if ( i == 0 )
value = j;
return
elseif ( j == 0 )
value = i;
return
end
%
% Divide out K as long as you can.
%
if ( 0 < j )
value = 1;
else
value = -1;
end
while ( true )
if ( mod ( i, k ) ~= 0 || mod ( j, k ) ~= 0 )
break
end
value = value * k;
i = i / k;
j = j / k;
end
return
end