• 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 }

    /* */

  • 相关阅读:
    flask之Blueprint蓝图
    flask之Flask、config配置
    flask之路由route
    flask之request
    flask之response
    pyhton中的深浅copy
    jQuery选择器
    Html常用标签
    python中的字典dict
    python基础知识
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2416585.html
Copyright © 2020-2023  润新知