Ejemplo n.º 1
0
    private static FibMatrix BinPow(FibMatrix val, int pow)
    {
        FibMatrix res = new FibMatrix(1, 0, 0, 1);

        if (pow == 0)
        {
            return(res);
        }
        bool isNegative = pow > 0 ? false : true;
        var  exp        = Math.Abs(pow);

        while (exp > 0)
        {
            if (exp % 2 == 1)
            {
                res *= val;
            }
            val  *= val;
            exp >>= 1;
        }

        if (isNegative)
        {
            return(1 / (res.a00 * res.a11 - res.a01 * res.a10)
                   * (new FibMatrix(res.a11, (-1) * res.a01, (-1) * res.a10, res.a00)));
        }
        else
        {
            return(res);
        }
    }
Ejemplo n.º 2
0
        static public void Main()
        {
            string[] stringArray = Console.ReadLine().Split(' ');
            long[]   intArray    = Array.ConvertAll(stringArray, Int64.Parse);
            var      m           = new FibMatrix(1, 1, 1, 0);

            m = m.RaiseMatrixByPowerMod(intArray[0] - 1, intArray[1]);
            Console.WriteLine(m.Result());
            string[] stringArray23 = Console.ReadLine().Split(' ');
        }
Ejemplo n.º 3
0
            public FibMatrix MultiplyMod(FibMatrix v, long divisor)
            {
                var result = new FibMatrix();
                var i      = v.e1;
                var j      = v.e2;

                result.e1 = (e1 * i + e3 * j) % divisor;
                result.e2 = (e2 * i + e4 * j) % divisor;
                i         = v.e3;
                j         = v.e4;
                result.e3 = (e1 * i + e3 * j) % divisor;
                result.e4 = (e2 * i + e4 * j) % divisor;
                return(result);
            }