题意1.1:

求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\)

思路1.1

我们首先需要知道斐波那契数列的通项是:\(Fib_i = \frac{\sqrt5}{5}[(\frac{1+\sqrt5}{2})^i-(\frac{1-\sqrt5}{2})^i]\),因为取模是个质数,我们可以用二次剩余定理得到\(\sqrt5 \mod 1e9+9 = 383008016\),然后就可以得到\(\frac{\sqrt5}{5}, \frac{1+\sqrt5}{2},\frac{1-\sqrt5}{2}\)的取模的整数值,我们记为\(s =\frac{\sqrt5}{5}, r_1=\ \frac{1+\sqrt5}{2},r_2= \frac{1-\sqrt5}{2}\)。那么
\[ \sum_{i=1}^nFib_i^m = \sum_{i=1}^ns^m(r_1^i - r_2^i)^m = s^m\sum_{i=1}^n\sum_{r=0}^m[(-1)^rC_m^rr_1^{i(m-r)}r_2^{ir}] \]
因为\(n\)太大了,所以我们还要继续化简:
\[ s^m\sum_{i=1}^n\sum_{r=0}^m[(-1)^rC_m^rr_1^{i(m-r)}r_2^{ir}] = s^m\sum_{r=0}^m[(-1)^rC_m^r\sum_{i=1}^n(r_1^{i(m-r)}r_2^{ir})] \]
因为\(\sum_{i=1}^n(r_1^{i(m-r)}r_2^{ir})\)是个等比数列,故我们假设\(q_r = r_1^{m-r}r_2^{r}\),则由等比数列性质可得:
\[ s^m\sum_{r=0}^m[(-1)^rC_m^r\sum_{i=1}^n(r_1^{i(m-r)}r_2^{ir})]= s^m\sum_{r=0}^m[(-1)^rC_m(q_r\frac{1-q_r^n}{1-q_r})] \]
推到这里就结束了,直接求解。

题意1.2

牛客传送门
求\(\sum_{i=1}^n Fib^m\mod 1e9\),\(n\in[1, 1e9], m\in[1, 1e4]\)

思路1.2

因为取模是个合数,那就不能二次剩余定理了。斐波那契数列的取模是有循环节的,斐波那契数列幂次的取模循环节和原数列取模循环节相同,那么我们直接暴力找到循环节,然后求解,最后用中国剩余定理合在一起即可。

代码:

//zoj3774
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<cmath>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 100000 + 5;
const int INF = 0x3f3f3f3f;
const ull seed = 131;
const ll MOD = 1000000009;
using namespace std;
ll fac[maxn], inv[maxn];
ll ppow(ll a, ll b){ll ret = 1;while(b){if(b & 1) ret = ret * a % MOD;b >>= 1;a = a * a % MOD;}return ret;
}
ll C(int n, int m){return fac[n] * inv[m] % MOD * inv[n - m] % MOD;
}
void init(){fac[0] = inv[0] = 1;for(int i = 1; i < maxn; i++) fac[i] = fac[i - 1] * i % MOD;inv[maxn - 1] = ppow(fac[maxn - 1], MOD - 2);for(int i = maxn - 2; i >= 1; i--) inv[i] = (i + 1LL) * inv[i + 1] % MOD;
}
int main(){init();ll n, m;ll s = 276601605, r1 = 691504013, r2 = 308495997;
//    printf("%lld\n", s * (r1 - r2) % MOD);int T;scanf("%d", &T);while(T--){scanf("%lld%lld", &n, &m);ll ans = 0;for(int r = 0; r <= m; r++){ll q = ppow(r1, m - r) * ppow(r2, r) % MOD;ll sum = q * (ppow(q, n) - 1LL) % MOD * ppow(q - 1, MOD - 2) % MOD;sum = sum * C(m, r) % MOD;if(r & 1) sum = -sum;ans = (ans + sum) % MOD;}ans = ans * ppow(s, m) % MOD;ans = (ans % MOD + MOD) % MOD;printf("%lld\n", ans);}return 0;
}
//牛客
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<cmath>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 100000 + 5;
const int INF = 0x3f3f3f3f;
const ull seed = 131;
const ll MOD = 1e9;
using namespace std;
ll mod[2] = {512, 1953125}, a[2];
ll sum[7812500 + 5], fab[7812500 + 5];
int lp[2] = {768, 7812500}; // 循环节
ll ppow(ll a, ll b, ll p){ll ret = 1;while(b){if(b & 1) ret = ret * a % p;a = a * a % p;b >>= 1;}return ret;
}
void exgcd(ll a, ll b, ll &x, ll &y){if(b == 0){x = 1, y = 0;return;}exgcd(b, a % b, x, y);ll tp = x;x = y, y = tp - a / b * y;
}
ll CRT(){ll ans = 0, lcm = 1, x, y;for(int i = 0; i < 2; i++) lcm *= mod[i];for(int i = 0; i < 2; i++){ll tp = lcm / mod[i];exgcd(tp, mod[i], x, y);x = (x % mod[i] + mod[i]) % mod[i];ans = (ans + tp * x * a[i]) % lcm;}return (ans % lcm + lcm) % lcm;
}
int main(){ll n, m;scanf("%lld%lld", &n, &m);fab[0] = 0, fab[1] = 1, sum[0] = 0, sum[1] = 1;for(int i = 2; i <= lp[1]; i++){fab[i] = (fab[i - 1] + fab[i - 2]) % MOD;sum[i] = (sum[i - 1] + ppow(fab[i], m, MOD)) % MOD;}a[0] = (sum[lp[0]] * (n / lp[0]) + sum[n % lp[0]]) % mod[0];a[1] = (sum[lp[1]] * (n / lp[1]) + sum[n % lp[1]]) % mod[1];printf("%lld\n", CRT());return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11383987.html

牛客多校第九场 ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解...相关推荐

  1. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)

    链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  2. 2019牛客多校第九场AThe power of Fibonacci(广义BM)

    2019牛客多校第九场AThe power of Fibonacci(广义BM) 题目大意 求斐波那契数列m次方的前n项和 解题思路 显然,斐波那契的m次方前缀和依然是线性递推,因此考虑用exBM求解 ...

  3. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  4. Quadratic equation(二次剩余)2019牛客多校第九场

    链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...

  5. 2019牛客多校第九场 H Cutting Bamboos (二分主席树)

    看到题解说二分 心里也有数了..... H Cutting Bamboos 给了一些高度得柱子 每区间你可以坎y次 y次之后 必须砍没有了 没有砍 总长度得一样 问第x次砍得高度在哪里 因为砍得次数 ...

  6. 2019牛客多校第九场AThe power of Fibonacci——扩展BM

    题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...

  7. 牛客多校第九场 H Cutting Bamboos —— 主席树

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 给你一片竹林,编号 1 1 1 到 n n n ,给定初始高度     每次查询区间,问一共砍 y y y 刀的时候,第 x x x 刀的高度     要求 ...

  8. 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列

    契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...

  9. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  10. python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs

    题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...

最新文章

  1. 浅析php curl_multi_*系列函数进行批量http请求
  2. android 网络编程--URL获取数据/图片
  3. 【边缘检测】RCN:Object Contour and Edge Detection with RefineContourNet
  4. 整理一些提高C#编程性能的技巧
  5. 协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...
  6. Javascript返回顶部和砸金蛋,跑马灯等游戏代码实现
  7. Google再曝偷偷收集用户隐私,安卓苹果用户全都中招
  8. 怎么解决相位抵消_如何理解音频相位
  9. VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
  10. 基于Yolov5目标检测的物体分类识别及定位 -- 全过程总结
  11. SSH——Hibernate简单配置
  12. MFC 进行界面设计与编程
  13. LitePal的简单使用
  14. html中的em的使用方法,css布局的em的使用方法
  15. 计算机音乐雅俗共赏,“雅俗共赏”与音乐教育
  16. Chrome 扩展开发教程
  17. RocketMQ读写队列
  18. 智能硬件产品经理需要具备的知识
  19. 崩坏3服务器维护2月8号,崩坏3 3.9版本「逐暗星辉」更新维护通知
  20. Docker学习笔记——(一)docker简介与docker安装

热门文章

  1. Vista SP1吞吃硬盘 将给我们带来哪些影响
  2. java破解ip屏蔽+多线程同步拨号-【多线程数据采集之五】
  3. puppet进阶指南——cron资源详解
  4. ASP.NET MVC:WebViewPage.cs
  5. C# WinForm 使用FlowLayoutPanel控件做为导航菜单按钮的容器
  6. 供电绘图计算软件-新增了图库管理功能
  7. K8s(二):130 道 K8s/Docker 配套练习题,学+练结合,一次吃透
  8. 电商金额计算的 4 个坑,千万注意了!
  9. B站游戏大佬飘了?深挖B站辱北邮事件经过:不是第一次
  10. Spring Boot 启动类真的是XXApplication?