AtCoderのARC    次のARCの問題へ    前のARCの問題へ

ARC051-B 互除法


問題へのリンク


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("1");
            //1 1
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("3");
            //4 5
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("12");
            //314159265 358979323
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int K = int.Parse(InputList[0]);

        // フィボナッチ数列
        var FibonacciList = new List<long>();
        FibonacciList.Add(0);
        FibonacciList.Add(1);
        FibonacciList.Add(1);
        for (long I = 1; I <= 50; I++) {
            long Val1 = FibonacciList[FibonacciList.Count - 2];
            long Val2 = FibonacciList[FibonacciList.Count - 1];
            FibonacciList.Add(Val1 + Val2);
        }

        //gcd(FibonacciList[K], FibonacciList[K + 1]);
        //Console.WriteLine(counter);
        Console.WriteLine("{0} {1}", FibonacciList[K], FibonacciList[K + 1]);
    }

    static long counter = 0;
    static long gcd(long a, long b)
    {
        if (b == 0) return a;
        counter++;
        return gcd(b, a % b);
    }
}


解説

フィボナッチ数列を使えば、解となります。