ブルーブリッジ杯入門訓練


ソースリンク:http://lx.lanqiao.cn/problem.page?gpid=T4
入門トレーニング:Fibonacci数列Description
Fibonacci数列の転送式はFn=Fn-1+Fn-2で、F 1=F 2=1です.nが大きい時はFnもとても大きいです.今はFnが10007で割った余りはいくらですか?Input入力説明:入力は整数nを含みます.入力例:10出力説明:1行を出力し、1つの整数を含み、Fnが10007で割った余りを表します.説明:この問題では、答えは1000 7,000の余りをFnで割る必要がありますので、この剰余を計算すればいいです.Fnの正確な値を先に計算してから、計算の結果を10007で剰余を除いて、直接に剰余を計算するのは、元の数を計算してから取るより簡単です.出力例:55時間制限:1.0 sメモリ制限:25.0 MB 1<=n==1,000,000.
重点語句:
  • で剰余を計算すれば
  • です.
  • は、Fnの正確な値を計算する必要がない
  • .
    問題解決の考え方:
                                 
              :(a + b) % c == a % c + b % c
             you can try it:
                      (3 + 4) % 2 = 1
                      3 % 2 = 1   plus   4 % 2 = 0  is 1,   so it's right!
    
    コードの展示
    #include 
    int main(void)
    {
        int i, index, i_num;
        int F_num1 = 1, F_num2 = 1; 
        scanf("%d", &i_num);//n      n  
        if(i_num == 1 || i_num == 2)
            printf("%d
    "
    , F_num1); else if(i_num >= 3) { for(i = 3; i <= i_num; i ++) { index = F_num2; F_num2 = (F_num1 + F_num2) % 10007;// F_num1 = index; } printf("%d
    "
    , F_num2); } return 0;
    分からないことがあれば、下のメッセージを歓迎します.