• 【题解】1644:【例 4】佳佳的 Fibonacci


    1644:【例 4】佳佳的 Fibonacci

    【题目描述】

    佳佳对数学,尤其对数列十分感兴趣。在研究完 Fibonacci 数列后,他创造出许多稀奇古怪的数列。例如用 S(n)

    表示 Fibonacci 前 n 项和 modm 的值,即 S(n)=(F1+F2+...+Fn)modm,其中 F1=F2=1,F**i=F**i−1+F**i−2 。可这对佳佳来说还是小菜一碟。终于,她找到了一个自己解决不了的问题。用 T(n)=(F1+2F2+3F3+...+nFn)modm 表示 Fibonacci 数列前 n项变形后的和 modm 的值。现在佳佳告诉你了一个 nm,请求出 T(n)的值。

    【输入】

    输入数据包括一行,两个用空格隔开的整数 n,m

    【输出】

    仅一行,T(n) 的值。

    【输入样例】

    5 5
    

    【输出样例】

    1
    

    【提示】

    样例解释

    T(5)=(1+2×1+3×2+4×3+5×5)mod5=1

    数据范围与提示:

    对于 30% 的数据,1≤n≤1000

    对于 60% 的数据,1≤m≤1000

    对于 100% 的数据,1≤n,m≤2^31−1

    solution

    T[n] 无法用递推式表达,是一个发散型的序列,而一般的收敛形和线型的序列都可以构造递推式

    我们把发散型的T[n] 用其他可以构造递推式的序列表示

    T[n] = F[1] + 2F[2] + 3F[3] + ... + nF[n]

    S[n] = F[1] + F[2] + F[3] + ... + F[n]

    令P[n] = nS[n] - T[n] = (n-1)F[1] + (n-2)F[2] + ... + (n-n)F[n]

    则P序列满足:

    P[n+1]

    = (n+1)(S[n] +F[n+1]) - T[n+1]

    = nS[n] +S[n] + (n+1)F[n+1] - T[n] - (n+1)F[n+1]

    = nS[n] - T[n] + F[n+1] + S[n]

    = P[n] + S[n]

    我们只需按矩阵乘法求出P序列和S序列,便可得T序列

    T[n] = nS[n] - P[n]

    [F[i-1],F[i],S[i],P[i]] * [0 1 1 0 1 1 1 0 0 0 1 1 0 0 0 1 ] = [F[i],F[i+1],S[i+1],P[i+1]]

    由[F[0],F[1],S[1],P[1]]做n-1次乘法即可

    构造矩阵大小:4*4

    出错原因:矩阵乘法不具有交换律,如果最后再乘初矩阵[F[0],F[1],S[1],P[1]],就错了
    注意:开longlong!!!!

  • 相关阅读:
    Codeforces Round #619 (Div. 2) ABC 题解
    Codeforces Round #669 ABC 题解
    中大ACM个人赛 ABC题题解
    Codeforces Round #601 (Div. 2) ABC 题解
    SCAU 2019年校赛 部分题解
    SCAU 2018年新生赛 初出茅庐 全题解
    Educational Codeforces Round 74 (Rated for Div. 2) ABC 题解
    Codeforces Round #603 (Div. 2) ABC 题解
    【题解】 CF767E Change-free 带悔贪心
    【题解】 NOIp2013 华容道 最短路+状态压缩 Luogu1979
  • 原文地址:https://www.cnblogs.com/ZhengkunJia/p/13164205.html
Copyright © 2020-2023  润新知