home *** CD-ROM | disk | FTP | other *** search
- /* Finds and returns the greatest common divisor of two integers.
- Uses Euclid's Algorithm: divides the larger integer by the
- smaller; if the remainder is 0, the smaller integer is the gcd,
- otherwise the smaller integer becomes the larger integer, the
- remainder becomes the smaller integer, and the process is
- repeated. */
-
- static unsigned int gcd_recurs(unsigned int, unsigned int);
-
- unsigned int gcd(unsigned int int1, unsigned int int2) {
- unsigned int temp;
-
- /* If the two integers are the same, that's the gcd and we're
- done */
- if (int1 == int2) {
- return(int1);
- }
-
- /* Swap if necessary to make sure that int1 >= int2 */
- if (int1 < int2) {
- temp = int1;
- int1 = int2;
- int2 = temp;
- }
-
- /* Now call the recursive form of the function, which assumes
- that the first parameter is the larger of the two */
- return(gcd_recurs(int1, int2));
- }
-
- static unsigned int gcd_recurs(unsigned int larger_int,
- unsigned int smaller_int)
- {
- int temp;
-
- /* If the remainder of larger_int divided by smaller_int is 0,
- then smaller_int is the gcd */
- if ((temp = larger_int % smaller_int) == 0) {
- return(smaller_int);
- }
-
- /* Make smaller_int the larger integer and the remainder the
- smaller integer, and call this function recursively to
- continue the process */
- return(gcd_recurs(smaller_int, temp));
- }