/// @addtogroup sefun
/// @{
/// @file math
/// @brief mathematics extensions
/// @author Gwenhwyvar
/// @version 0.1.0
/// @date 2016-01-25

// --------------------------------------------------------------------------
/// @brief gcd -,greatest common devisor
/// @Param a
/// @Param b
/// @Returns 
// --------------------------------------------------------------------------
public int gcd(int a, int b)
{
    if(b > a)
    {
        b ^= a;
        a ^= b;
        b ^= a;
    }
    while(b)
    {
        int t= b;

        b = a % b;
        a = t;
    }
    return a;
}
// --------------------------------------------------------------------------
/// @brief lcm - least common multiple
/// @Param a
/// @Param b
/// @Returns 
// --------------------------------------------------------------------------
public int lcm(int a, int b)
{
    if(a > b)
        a /= gcd(a, b);
    else
        b /= gcd(b, a);
    return a * b;
}
// --------------------------------------------------------------------------
/// @brief fib - fibonaccci number
/// @Param n
/// @Returns 
// --------------------------------------------------------------------------
public int fib(int n)
{
    int f1,
        f2;

    if(n < 0)
        return -1;
    else if(n < 2)
        return 1;

    f1 = f2 = 1;

    for(int i = 2; i < n; i++)
    {
        int a = f1 + f2;
        f1 = f2;
        f2 = a;
    }
    return f2;
}
///  @}
