斐波那契和(“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 J,矩阵快速幂)

博客优快云 立即下载

一.题目链接:

斐波那契和

二.题目大意:

求  \sum _{i=1} ^{n} i^kfib(i) ,\;\; 1 \leq n \leq 10^{18}, 1 \leq k \leq 100

三.分析:

比赛时套杜教 BM 一直wa,赛后才发现模数写错...(太蠢了

由于杜教 BM 直接套上模板改改模数就能 AC,这里只给出非杜教 BM 解法(杜教 BM 他不香吗?

首先做一下符号解释

F_k(n) = \sum _{i=1}^n i^kfib(i)

G_k(n) = \sum _{i = 1} ^{n} (n - i)^k fib(i)

 符号化后,题目即求 F_k(n)

然后求 F_k(n) 的递推式

G_k(n) = \sum_{i = 1} ^n (n - i)^k fib(i)

G_k(n) = \sum_{i = 1} ^n ((-i) + n)^k fib(i)

G_k(n) = \sum_{i = 1} ^n \sum_{j = 0}^k \binom{k}{j} (-i)^j n^{k-j} fib(i)

G_k(n) = \sum_{i = 1} ^n \sum_{j = 0}^k \binom{k}{j} (-1)^ji^j n^{k-j} fib(i)

G_k(n) = \sum_{j = 0}^k \binom{k}{j} (-1)^j n^{k-j} \sum_{i = 1} ^ni^j fib(i)

G_k(n) = \sum_{j = 0}^k \binom{k}{j} (-1)^j n^{k-j} F_j(n)

G_k(n) = (-1)^kF_k(n) + \sum_{j = 0}^{k-1} \binom{k}{j} (-1)^j n^{k-j} F_j(n)

(-1)^kF_k(n) = G_k(n) - \sum_{j = 0}^{k-1} \binom{k}{j} (-1)^j n^{k-j} F_j(n)

当计算 F_k(n) 时,前面 F_j(n) 的值均已计算完毕,因此我们只需求 G_i(n),\;\; 0 \leq i \leq k

下面求 G_k(n) 的递推式

当 k = 0 时

G_0(n) = \sum_{i=1}^{n} fib(i) = fib(i + 2) - 1

当 k \geq 1 时

G_k(n+1) - G_k(n) = \sum _{i=1}^{n+1} (n +1- i)^kfib(i) - \sum _{i=1}^{n} (n - i)^kfib(i)

G_k(n+1) - G_k(n) = \sum _{i=1}^{n} (n +1- i)^kfib(i) - \sum _{i=1}^{n} (n - i)^kfib(i)

G_k(n+1) - G_k(n) = \sum _{i=1}^{n} ((n +1- i)^k - (n - i)^k)fib(i)

G_k(n+1) - G_k(n) = \sum _{i=1}^{n} (((n - i) +1)^k - (n - i)^k)fib(i)

G_k(n+1) - G_k(n) = \sum _{i=1}^{n} (\sum_{j = 0}^{k} \binom{k}{j}(n-i)^j - (n - i)^k)fib(i)

G_k(n+1) - G_k(n) = \sum _{i=1}^{n} \sum_{j = 0}^{k-1} \binom{k}{j}(n-i)^jfib(i)

G_k(n+1) - G_k(n) = \sum_{j = 0}^{k-1} \binom{k}{j} \sum _{i=1}^{n}(n-i)^jfib(i)

G_k(n+1) - G_k(n) = \sum_{j = 0}^{k-1} \binom{k}{j} G_j(n)

G_k(n+1) = G_k(n) + \sum_{j = 0}^{k-1} \binom{k}{j} G_j(n)

G_k(n+1) = \sum_{j = 0}^{k} \binom{k}{j} G_j(n)

至此我们即可用矩阵快速幂求解 G_i(n),\;\; 0 \leq i \leq k

具体来讲

 G = \left[ \begin{matrix} G_k(n)& G_{k-1}(n) & \cdots & G_0(n) & fib(n + 2) & fib(n + 1) & 1\\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \\ \vdots &\vdots & \cdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \end{matrix} \right]_{k+4}

G' = \left[ \begin{matrix} G_k(n-1)& G_{k-1}(n-1) & \cdots & G_0(n-1) & fib(n + 1) & fib(n) & 1\\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \\ \vdots &\vdots & \cdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \end{matrix} \right]_{k+4}

B = \left[ \begin{matrix} \binom{k}{k} & 0 & 0 & 0 & \cdots & 0 & 0 & 0 & 0 & 0\\ \binom{k}{k-1} & \binom{k-1}{k-1} & 0 & 0 & \cdots & 0 & 0 & 0 & 0 & 0\\ \binom{k}{k-2} & \binom{k-1}{k-2} & \binom{k-2}{k-2} & 0 & \cdots & 0 & 0 & 0 &0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ \binom{k}{1} & \binom{k-1}{1} & \binom{k-2}{1} & \binom{k-3}{1} & \cdots & \binom{1}{1} & 0 & 0 & 0 & 0 \\ \binom{k}{0} & \binom{k-1}{0} & \binom{k-2}{0} & \binom{k-3}{0} & \cdots & \binom{1}{0} & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & \cdots & 0 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & \cdots & 0 & 1 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & \cdots & 0 & -1 & 0 & 0 & 1 \end{matrix} \right]_{k+4}

可知 G = G'B

A = \left[ \begin{matrix} 0 & 0 & \cdots & 1 & 2 & 1 & 1\\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \\ \vdots &\vdots & \cdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 0 & \cdots & 0 & 0 & 0 & 0 \end{matrix} \right]_{k+4}

递归计算可知 G = AB^{n-1}

四.代码实现:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int M = (int)1e2 + 4;
const ll mod = (ll)998244353;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;

ll n; int k;
ll g[M + 5];
ll f[M + 5];

struct node
{
    ll D[M + 5][M + 5];
};

ll quick(ll a, ll b)
{
    ll sum = 1;
    while(b)
    {
        if(b & 1) sum = sum * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return (sum + mod) % mod;
}

node mul(node a, node b)
{
    node c; memset(c.D, 0, sizeof(c.D));
    for(int i = 0; i < M; ++i)
    for(int j = 0; j < M; ++j)
    for(int l = 0; l < M; ++l)
    c.D[i][j] = (c.D[i][j] + a.D[i][l] * b.D[l][j] % mod) % mod;
    return c;
}

node quick(node a, ll b)
{
    node sum; memset(sum.D, 0, sizeof(sum.D));
    for(int i = 0; i < M; ++i) sum.D[i][i] = 1;
    while(b)
    {
        if(b & 1) sum = mul(sum, a);
        a = mul(a, a);
        b >>= 1;
    }
    return sum;
}

int main()
{
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    scanf("%lld %d", &n, &k);
    node A, B;
    memset(A.D, 0, sizeof(A.D));
    memset(B.D, 0, sizeof(B.D));
    A.D[0][k] = 1, A.D[0][k + 1] = 2, A.D[0][k + 2] = 1, A.D[0][k + 3] = 1;
    for(int j = k; j >= 0; --j)
    {
        B.D[k][j] = 1;
        for(int i = k - 1; i >= j; --i) B.D[i][j] = (B.D[i][j + 1] + B.D[i + 1][j + 1]) % mod;
    }
    B.D[k][k] = 0;
    B.D[k + 1][k] = B.D[k + 1][k + 1] = B.D[k + 1][k + 2] = 1;
    B.D[k + 2][k] = B.D[k + 2][k + 1] = 1;
    B.D[k + 3][k] = -1, B.D[k + 3][k + 3] = 1;
    node G = mul(A, quick(B, n - 1));
    for(int i = 0; i <= k; ++i) g[i] = G.D[0][k - i];
    f[0] = G.D[0][k + 1] - 1;
    for(int i = 1; i <= k; ++i)
    {
        f[i] = g[i];
        for(int j = 0; j <= i - 1; ++j) f[i] = (f[i] + (((j&1)<<1)-1) * B.D[k - j][k - i] * quick(n % mod, i - j) % mod * f[j] % mod) % mod;
        if(i & 1) f[i] *= -1;
        f[i] = (f[i] + mod) % mod;
    }
    printf("%lld\n", f[k]);
    return 0;
}

 

基于QT+C++开发的高仿QQ聊天软件+源码+项目说明(期末大作业&课程设计&项目开发) 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于QT+C++开发的高仿QQ聊天软件+源码+项目说明,适合期末大作业、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 立即下载

相关推荐

科研效率革命:Zotero与Web of Science联动实现千篇文献一键获取

本文详细介绍了如何利用Zotero与Web of Science联动实现科研文献的高效管理,包括批量导入、智能下载和自动整理千篇文献的技巧。通过精准检索、RIS文件导出和Zotero插件设置,科研人员可以大幅提升文献获取和管理的效率,特别适合开题报告和综述写作等场景。

weixin_29219539的博客 255

新手指南|欢迎来到优快云

嘿,新朋友~第一次来到优快云想必有点蒙圈儿吧!C菌吐血整理了一份使用指南,带你轻松玩转优快云~ 一、登录/注册 1、PC端 1.1 微信注册登录 点击「微信注册登录」按钮,用微信扫描下方小程序码,而后点击「微信登录」,绑定相应手机号即可登录。 1.2 手机免密登录 输入手机号,获取验证码并输入即可。未注册手机验证后自动注册登录,需要注意的是,以下号段不支持注册: 手机卡(虚拟运营商)不支持号段: 中国移动:165 / 1703 / 1705 / 1706 中国联通:167 / 1704 / 1707

优快云 官方博客 19万+

USB2.0基础知识总结

目录 1、协议层: 1.1、域分类 1.2 、USB传输方式: 1、协议层: 域和包定义:包是一次传输的单位,每个包由多个域组成; USB中是按照LSB进行字节传输; 1.1、域分类 1.1.1: 同步域(SYNC field) 所有的包都开始于同步域,在低速和全速通信中SYNC field用7个0和1个1来表示。 由于USB2.0使用了NRZI编码(0用翻转来表示,1用不翻转表示),所以00000001就是上图那样。 ...

qq_32938605的博客 4410

优快云

优快云 将于 2024 年在全国举办多场技术及行业应用的开发者大会、主题峰会、技术沙龙等会议活动,主要领域包括开源,云原生,AI,数据库,DevOps,操作系统,大数据,研发效能,芯片,元宇宙,自动驾驶,金融,工业互联网等。总的来说,优快云作为中国最大的IT社区和服务平台,不仅为软件开发者和IT从业者提供了丰富的学习资源和职业发展机会,还通过其强大的社区影响力和技术权威性,是一个为 IT 技术人成长及科技企业发展提供全方位服务的开发者生态平台,致力于成就一亿技术人,成为技术人交流和成长的家园。

博客 8万+

Signoff Criteria --- ocv/aocv/pocv之AOCV介绍

Advanced on chip variation,相比较于OCV来说,对于悲观度的去除很有效。相比较与ocv对于整个design中的lauch/capture path设置统一的derate值,aocv通过将cell derate值与cell的逻辑深度以及实际的位置结合起来进行derate值的设定。那么这种derate如何能够设置到具体的cell呢,其实是我们在跑STA时候会读入相关的aocv lib file,里面有专门对相关的cell进行的aocv derate值的描述。> table: \

sinat_27691203的博客 7854

【WILEY】从Revision到Online:逐层拆解投稿状态更新与关键文件提交实战

本文详细解析了学术论文从返修到在线发表的全过程,重点拆解了投稿系统状态更新背后的含义与应对策略。文章提供了返修稿与回复信的准备技巧、关键补充文件(如图文摘要)的提交要点,并分享了校对校样与处理出版协议的实战经验,帮助作者高效、专业地完成发表流程。

weixin_29209805的博客 713

博客整理大全

如何快速获得自己的所有csdn博客地址

nameofcsdn的博客 1万+

闲鱼客户端三重动态签名机制解析:x-sign、x-mini-wua与x-umt

在移动客户端安全通信中,设备级动态签名已成为主流App防范自动化攻击的核心手段。其原理是将设备指纹、运行时行为与可信硬件标识深度融合,生成不可复用、不可跨端、不可静态伪造的请求凭证。这类机制超越传统Token或Session鉴权,具备强上下文绑定性与实时熵值校验能力,广泛应用于电商、社交及开放平台等高风险接口场景。技术价值体现在有效识别模拟器、无头浏览器与集群化爬虫,同时保障多端一致性与合规数据对接。本文聚焦闲鱼客户端实际落地的x-sign(带设备上下文的混合签名)、x-mini-wua(小程序行为水印)与

weixin_35732273的博客 496

手把手教你玩转优快云博客!!

优快云博客是一个宝贵的资源,可以帮助你学习编程思路、技巧,并通过阅读和分析代码示例来提高编程能力。通过不断地学习和实践,你将能够在编程之路上越走越远,为IT行业的发展做出贡献。记得在优快云博客上分享你的学习心得和代码示例,以帮助和启发其他开发者。

2302_80728797的博客 2万+

【Unity工具篇】| Unity项目中如何使用LuBan插件,详细集成步骤

前面写了一篇文章用于介绍LuBan的下载及快速使用方法:【Unity实战篇】| 实用插件LuBan,快速上手使用 本篇文章就来介绍一下将LuBan集成到自己的Unity项目的方法。 看完本篇文章之后,就可以直接把LuBan插件放到自己项目中进行配表和使用。

努力前行,总会成为自己心中的那道光 2万+

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

优快云博客

csdn博客是中国开源博客前列的网站。上面汇集了中国软件,硬件,通信,人工智能相关的IT人员。csdn博客的成功之一,每个人都可以注册,发表相关见解,只有好的博客,和有用的知识或者智慧,才会被推荐和认识。 csdn的开源很好。百度上搜索到的所有互联网知识都可以找到答案。不只是软件工程的前后端知识,这也是为什么csdn网站强烈需要好的文章。 csdn成功之二。开源很广泛,几乎垄断了所有软件硬件的科技人员,以及数学,前沿方向,机器人,区块链,信息安全等。 csdn成功之三,比赛,演讲,活动,等不断地推广自

qq_32663053的博客 3695

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 Problem J 斐波那契和 矩阵快速幂递推

总的思路就是把Fn 转化成用Fj 表示的线性递推的形式。 然后用矩阵快速幂加速。 具体分析参考这个博主(不过他的代码是错的,可以参考下思路)不过所有能用矩阵快速幂的线性递推。。 都能同杜教BM开挂秒。。。 https://blog.csdn.net/The___Flash/article/details/106066577 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o

bjfu170203101的博客 317

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 J.斐波那契和

斐波那契数列、求导、数学技巧

ACoder 458

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 J斐波那契和 BM外挂

分析可知这符合线性递推式。 所以BM。。 如何分析出。。下篇BLOG写矩阵快速幂的写法(待补)

bjfu170203101的博客 279

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 (C(dp) E(卡特兰数) J(BM or 化简矩阵快速幂))

题目链接 这篇题解写的可能不太好,有点仓促,因为是大晚上写的,着急去睡觉了。 C-张老师的旅行 做法:来自官方题解 自认为dp不错了,没想到被这题给教育了。 #include<bits/stdc++.h> #define ll long long #define pb push_back #define lowbit(x) ((x)&(-(x))) #define mid ((l+r)>>1) #define lson rt<<1, l,

ccsu_deer 644

优快云记录

其他

KingOne007的博客 1365

优快云规则详解(一)

优快云是一个专业的技术社区,不仅可以分享自己的技术经验,还可以向其他行业专业人士学习。在优快云上写出优秀的博客可以增加自己的曝光率和声誉,但是除了写出好博客,我们还可以认识规则、了解规则、利用规则,来更好地展示自己的专业能力和吸引更多的读者。因此,掌握优快云的规则是非常重要的,可以帮助我们更好地利用这个平台,实现自己的目标。在本文中,将会介绍一些优快云的规则和注意事项,帮助读者更好地运用这个平台。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 4万+

博客部署教程

【代码】博客部署教程。

justleavel的博客 4784

博客系统 -- 静态页面

本文主要内容 : 实现一个 博客系统的静态页面 , 加深 html , css ,javaScript 的 印象

mu_tong_的博客 4287

优快云博客快速入门到精通

优快云(China Software Developer Network)是中国最大的IT技术社区之一,也是程序员和开发者学习、交流和分享技术知识的重要平台。在优快云上,你可以创建博客、发布技术文章、分享经验、并与其他开发者互动。以下是关于如何从快速入门到精通优快云博客的详细教程。

weixin_39604653的博客 1万+

博客教程

博客教程

2202_75454356的博客 1万+

优快云博客常用写作技巧

本文结合平时写博客常用到的一些方法,也供自己往后查阅翻看😋

MODAX的博客 4290

教你玩转优快云博客

我在优快云博客可以做什么呢? 优快云博客是一个专业IT技术发表的平台。在这里,你可以阅读技术大佬的博文,为他们点赞,评论,收藏;在这里,你也可以发布自己的博文,你可以发布技术分享、面试技巧、程序人生,也可以发布认真或有趣的交流与分享。 我该怎么发布文章? 点击 创作中心 即可撰写博文,但是文章内容不得违反法律法规及政策规定哦!

优快云 官方博客 36万+

博客系统(前后端分离)

本篇文章根据前面学过的前端和后端知识,进行实践开发出一个个人的博客系统,这个博客系统主要可以进行查看博客、发布博客以及删除博客,最后部署到云服务器上可被他人所访问。

qq_45283185的博客 3238
上一篇: Carny Magician(ICPC Pacific Northwest Regional Contest 2019,数位 DP)
下一篇: 管道取珠(NOI2009,线性 DP)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值