zoukankan      html  css  js  c++  java
  • poj 3070 Fibonacci

    先计算幂乘表,根据输入n的二进制位判断是否乘该位相应的幂;

    以前做过类似的,但是当时递推矩阵不一样,这次拜读了Ozy的大作,自己敲了一遍;

    运行时间: 0ms,神奇吧!

     1 /* poj 3070 */
    2
    3 # include <stdio.h>
    4
    5 # define MAXN 30
    6 # define MOD 10000
    7
    8 short int power[MAXN][4] = {{1,1,1,0}};
    9 short int ans[4];
    10
    11 void mul(short int *a, short int *b, short int *c);
    12
    13 int main()
    14 {
    15 int n, i;
    16
    17 for (i = 1; i < MAXN; ++i)
    18 mul(power[i], power[i-1], power[i-1]);
    19
    20 while (~scanf("%d", &n))
    21 {
    22 ans[0] = ans[3] = 1;
    23 ans[1] = ans[2] = 0;
    24 if (n == -1) break;
    25 for (i = 0; i < MAXN; ++i)
    26 if (n & (0x1<<i)) mul(ans, ans, power[i]);
    27 printf("%d\n", ans[1]);
    28 }
    29
    30 return 0;
    31 }
    32
    33 void mul(short int *a, short int *b, short int *c)
    34 {
    35 short int t[4];
    36 t[0] = (b[0]*c[0] + b[1]*c[2]) % MOD;
    37 t[1] = (b[0]*c[1] + b[1]*c[3]) % MOD;
    38 t[2] = (b[2]*c[0] + b[3]*c[2]) % MOD;
    39 t[3] = (b[2]*c[1] + b[3]*c[3]) % MOD;
    40 memcpy(a, t, sizeof(t));
    41 }

    /* */

  • 相关阅读:
    iOS数据持久化的方式
    Runtime
    <02>
    <01>
    <02>
    UIActivityIndicatorView
    <01>数据存储
    UI<10>
    UI<09>
    UI<08>
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2416585.html
Copyright © 2011-2022 走看看