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] */