''' n' = helper 1 n'
    where helper acc n | n > 1 = helper (acc * n) (n - 1)
                       | otherwise = acc


--int gcd(int a, int b) {
--  while (b) {
--    int tmp = a;
--    a = b;
--    b = tmp % b
--  }
--  return a;
--}


--int gcd(int a, int b) {
--    return b == 0 ? a : gcd(b, a % b);
--}

-- pattern matching
gcd' a 0 = a
gcd' a b = gcd' b (mod a b)

whoami [] = [
factorial''''    :: Integer -> Integer
factorial'''' n' = helper 1 n'
    where helper acc n | n > 1 = helper (acc * n) (n - 1)
                       | otherwise = acc


--int gcd(int a, int b) {
--  while (b) {
--    int tmp = a;
--    a = b;
--    b = tmp % b
--  }
--  return a;
--}


--int gcd(int a, int b) {
--    return b == 0 ? a : gcd(b, a % b);
--}

-- pattern matching
factorial'''' n' = helper 1 n'
    where helper acc n | n > 1 = helper (acc * n) (n - 1)
                       | otherwise = acc


--int gcd(int a, int b) {
--  while (b) {
--    int tmp = a;
--    a = b;
--    b = tmp % b
--  }
--  return a;
--}


--int gcd(int a, int b) {
--    return b == 0 ? a : gcd(b, a % b);
--}

-- pattern matching