## modules/up/src/gnug++/gcd.cc

/* [<][>][^][v][top][bottom][index][help] */

## FUNCTIONS

This source file includes following functions.

1. gcd

       1 /*
       2 Copyright (C) 1990 Free Software Foundation
       3     written by Doug Lea (dl@rocky.oswego.edu)
       4
       5 This file is part of the GNU C++ Library.  This library is free
       6 software; you can redistribute it and/or modify it under the terms of
       7 the GNU Library General Public License as published by the Free
       8 Software Foundation; either version 2 of the License, or (at your
       9 option) any later version.  This library is distributed in the hope
      10 that it will be useful, but WITHOUT ANY WARRANTY; without even the
      11 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      12 PURPOSE.  See the GNU Library General Public License for more details.
      13 You should have received a copy of the GNU Library General Public
      14 License along with this library; if not, write to the Free Software
      15 Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
      16 */
      17
      18 #ifdef __GNUG__
      19 #pragma implementation
      20 #endif
      21 #include <builtin.h>
      22
      23
      24 /*
      25  common functions on built-in types
      26 */
      27
      28 long gcd(long x, long y)        // euclid's algorithm
         /* [<][>][^][v][top][bottom][index][help] */
      29 {
      30   long a = abs(x);
      31   long b = abs(y);
      32
      33   long tmp;
      34
      35   if (b > a)
      36   {
      37     tmp = a; a = b; b = tmp;
      38   }
      39   for(;;)
      40   {
      41     if (b == 0)
      42       return a;
      43     else if (b == 1)
      44       return b;
      45     else
      46     {
      47       tmp = b;
      48       b = a % b;
      49       a = tmp;
      50     }
      51   }
      52 }

/* [<][>][^][v][top][bottom][index][help] */