牛客多校第九场 ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解...
题意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(二次剩余定理+斐波那契数列通项/循环节)题解...相关推荐
- 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)
链接:https://ac.nowcoder.com/acm/problem/18987 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 2019牛客多校第九场AThe power of Fibonacci(广义BM)
2019牛客多校第九场AThe power of Fibonacci(广义BM) 题目大意 求斐波那契数列m次方的前n项和 解题思路 显然,斐波那契的m次方前缀和依然是线性递推,因此考虑用exBM求解 ...
- Cutting Bamboos(牛客多校第九场H主席树+二分+思维)
链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...
- Quadratic equation(二次剩余)2019牛客多校第九场
链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...
- 2019牛客多校第九场 H Cutting Bamboos (二分主席树)
看到题解说二分 心里也有数了..... H Cutting Bamboos 给了一些高度得柱子 每区间你可以坎y次 y次之后 必须砍没有了 没有砍 总长度得一样 问第x次砍得高度在哪里 因为砍得次数 ...
- 2019牛客多校第九场AThe power of Fibonacci——扩展BM
题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...
- 牛客多校第九场 H Cutting Bamboos —— 主席树
题目链接:点我啊╭(╯^╰)╮ 题目大意: 给你一片竹林,编号 1 1 1 到 n n n ,给定初始高度 每次查询区间,问一共砍 y y y 刀的时候,第 x x x 刀的高度 要求 ...
- 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列
契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...
- 2019牛客多校第一场
2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...
- python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
最新文章
- 浅析php curl_multi_*系列函数进行批量http请求
- android 网络编程--URL获取数据/图片
- 【边缘检测】RCN:Object Contour and Edge Detection with RefineContourNet
- 整理一些提高C#编程性能的技巧
- 协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...
- Javascript返回顶部和砸金蛋,跑马灯等游戏代码实现
- Google再曝偷偷收集用户隐私,安卓苹果用户全都中招
- 怎么解决相位抵消_如何理解音频相位
- VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
- 基于Yolov5目标检测的物体分类识别及定位 -- 全过程总结
- SSH——Hibernate简单配置
- MFC 进行界面设计与编程
- LitePal的简单使用
- html中的em的使用方法,css布局的em的使用方法
- 计算机音乐雅俗共赏,“雅俗共赏”与音乐教育
- Chrome 扩展开发教程
- RocketMQ读写队列
- 智能硬件产品经理需要具备的知识
- 崩坏3服务器维护2月8号,崩坏3 3.9版本「逐暗星辉」更新维护通知
- Docker学习笔记——(一)docker简介与docker安装
热门文章
- Vista SP1吞吃硬盘 将给我们带来哪些影响
- java破解ip屏蔽+多线程同步拨号-【多线程数据采集之五】
- puppet进阶指南——cron资源详解
- ASP.NET MVC:WebViewPage.cs
- C# WinForm 使用FlowLayoutPanel控件做为导航菜单按钮的容器
- 供电绘图计算软件-新增了图库管理功能
- K8s(二):130 道 K8s/Docker 配套练习题,学+练结合,一次吃透
- 电商金额计算的 4 个坑,千万注意了!
- B站游戏大佬飘了?深挖B站辱北邮事件经过:不是第一次
- Spring Boot 启动类真的是XXApplication?