ZOJ-3774 Power of Fibonacci——等比数列求和&&等价替换
题目
求 $\displaystyle \sum_{i=1}^n F_i^k$,($1 \leq n\leq 10^{18},1 \leq k\leq 10^5$),答案对 $10^9+9$ 取模。
分析
将通项公式 $fib_i = \frac{1}{\sqrt{5}} ((\frac{1 + \sqrt{5}}{2})^i - (\frac{1 - \sqrt{5}}{2})^i)$ 代入,可以得到
$$\begin{align*} S & = (\frac{1}{\sqrt{5}})^k \sum\limits_{i=1}^n ((\frac{1 + \sqrt{5}}{2})^i - (\frac{1 - \sqrt{5}}{2}) ^ i)^k \\ & = (\frac{1}{\sqrt{5}})^k \sum\limits_{i=1}^n \sum\limits_{j=0}^k (-1)^{k-j} \binom{k}{j}(\frac{1 + \sqrt{5}}{2})^{ij} (\frac{1 - \sqrt{5}}{2})^{i(k-j)} \\ &= (\frac{1}{\sqrt{5}})^k \sum\limits_{j=0}^k (-1)^{k-j} \binom{k}{j} \sum\limits_{i=1}^n [(\frac{1 + \sqrt{5}}{2})^{j} (\frac{1 - \sqrt{5}}{2})^{k-j}]^i \\ &= (\frac{1}{\sqrt{5}})^k \sum\limits_{j=0}^k (-1)^{k-j} \binom{k}{j} (\frac{t^{n+1} - t}{t-1})
\end{align*}$$
因为 $x^2 \equiv 5(mod \ p)$,最终结果不含 $\sqrt 5$, 肯定是被平方了,所以可以用 $x$ 代替 $\sqrt 5$。
因为5在模 $10^9+9$意义下有二次剩余,所以 $\sqrt 5$ 有实际意义,那么我们可以从小到大枚举 $j$,后面那一部分是等比数列求和,注意特判公比为1.
如果5在某些模数下没有二次剩余,因为 $a \sqrt 5 + b% 在上述需要的运算(加、减、乘、除和幂)中是封闭的,所有我们可以用 $pair(a, b)$ 表示 $a \sqrt 5 + b$,并进行运算。
#include<bits/stdc++.h>
using namespace std; #define int long long
inline int read(){
int a = ;
char c = getchar();
bool f = ;
while(!isdigit(c) && c != EOF){
if(c == '-')
f = ;
c = getchar();
}
if(c == EOF)
exit();
while(isdigit(c)){
a = a * + c - ;
c = getchar();
}
return f ? -a : a;
} const int MOD = 1e9 + , INV2 = (MOD + ) >> ; //2*(p+1)/2=1
int n, k; template < class T >
T poww(T a , int b){
T times = ;
while(b){
if(b & ) times = times * a % MOD;
a = a * a % MOD;
b >>= ;
}
return times;
} struct PII{
int st , nd;
PII(int _st = , int _nd = ) : st(_st) , nd(_nd){}
PII operator =(int b){return *this = PII(b , );}
bool operator !=(PII a){return st != a.st || nd != a.nd;}
};
PII operator +(PII a , PII b){return PII((a.st + b.st) % MOD , (a.nd + b.nd) % MOD);}
PII operator -(PII a , PII b){return PII((a.st + MOD - b.st) % MOD , (a.nd + MOD - b.nd) % MOD);}
PII operator *(PII a , PII b){return PII((a.st * b.st + * a.nd * b.nd) % MOD , (a.st * b.nd + a.nd * b.st) % MOD);}
PII operator *(PII a , int b){return PII(a.st * b % MOD , a.nd * b % MOD);}
PII operator %(PII a , int b){return a;}
PII operator /(PII a , PII b){return a * PII(b.st , MOD - b.nd) * poww((b.st * b.st - * b.nd * b.nd % MOD + MOD) % MOD , MOD - );} int solve(int x , int k){
PII all( , );
int C = , sgn = poww(MOD - , k);
for(int j = ; j <= k ; ++j){
PII cur = poww(PII(INV2 , INV2) , j) * poww(PII(INV2 , MOD - INV2) , k - j);
if(cur != PII( , ))
all = all + (poww(cur , x + ) - cur) / (cur - PII( , )) * sgn * C;
else
all = all + PII(x % MOD , ) * sgn * C;
C = C * (k - j) % MOD * poww(j + , MOD - ) % MOD;
sgn = sgn * (MOD - ) % MOD;
}
all = all * poww(PII( , poww(5LL , MOD - )) , k); //模板要求poww的参数类型相同
return all.st;
} signed main(){
for(int T = read() ; T ; --T){
n = read(); k = read();
printf("%lld\n" , solve(n , k));
}
return ;
}
参考链接:https://www.cnblogs.com/Itst/p/10735935.html
ZOJ-3774 Power of Fibonacci——等比数列求和&&等价替换的更多相关文章
- [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)
		Power of Fibonacci Time Limit: 5 Seconds Memory Limit: 65536 KB In mathematics, Fibonacci numbe ... 
- Power of Matrix  等比数列求和 矩阵版!
		#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ... 
- hdu 1588(Fibonacci矩阵求和)
		题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ... 
- [hdu 4959]Poor Akagi 数论(卢卡斯数,二次域运算,等比数列求和)
		Poor Akagi Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ... 
- POJ 1845 (约数和+二分等比数列求和)
		题目链接: http://poj.org/problem?id=1845 题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1) ... 
- 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
		原题:ZOJ 3774 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3774 --------------------- ... 
- hoj3152-Dice 等比数列求和取模
		http://acm.hit.edu.cn/hoj/problem/view?id=3152 Dice My Tags (Edit) Source : Time limit : sec Memory ... 
- ZOJ3774 Power of Fibonacci 斐波那契、二项式定理
		传送门--Vjudge 要求\(S = \sum\limits_{i=1}^n fib_i^k \mod 10^9+9\) 将通项公式\(fib_i = \frac{1}{\sqrt{5}} ((\f ... 
- luogu1397 [NOI2013]矩阵游戏 (等比数列求和)
		一个比较显然的等比数列求和,但有一点问题就是n和m巨大.. 考虑到他们是在幂次上出现,所以可以模上P-1(费马小定理) 但是a或c等于1的时候,不能用等比数列求和公式,这时候就要乘n和m,又要变成模P ... 
随机推荐
- 《Mysql - 幻读》
			一:准备 - 为了深入了解幻读,准备数据. CREATE TABLE `t` ( `id` ) NOT NULL, `c` ) DEFAULT NULL, `d` ) DEFAULT NULL, PR ... 
- AQS底层原理分析
			J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件.比如线程池.阻塞队列.计时器.同步器.并发集合等等.并发包的作者是大 ... 
- 如何加入 Skype for Business 会议?
			参加一个线上培训,收到了Skype的参会地址,是这个样子的 然后就是一脸懵逼的不知道怎么参加会议了.找了半天终于在同事的帮助下参加成功. 我的参加方法:在Window上用Skype for Busin ... 
- 在论坛中出现的比较难的sql问题:21(递归问题 检索某个节点下所有叶子节点)
			原文:在论坛中出现的比较难的sql问题:21(递归问题 检索某个节点下所有叶子节点) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ... 
- SVN_03绿色版
			1.首先备份当前安装visualSVN文件的bin目录,万一出错还能反个水.一般默认安装路径是C:\Program Files(x86)VisualSVN\bin 2.然后运行ildasm,Windo ... 
- 3.asp.net core 关键概念
			1. StartUp类 在Startup.ConfigureServices方法里配置或注册服务 在Startup.Configure方法里配置请求处理管道.请求处理管道由一系列中间件组建构成,每个中 ... 
- Java Web-Ajax学习
			Java Web-Ajax学习 概念 Ajax(Asynchronous JavaScript And XML,异步的JavaScript和XML). 异步和同步:在客户端和服务器端相互通信的基础上来 ... 
- ext TreePanel树节点操作
			1.全部展开 tree.expandAll();2.全部收缩 tree.collapseAll();3.得到父节点 node.parentNode4.判断是否有父节点 node.parentNode= ... 
- H5新增input标签
			1.电子邮件 <input type="email" name="email"/> 默认正则:输入内容必须有@符号,@后面必须有内容 2.搜索框 & ... 
- Android笔记(三十三) Android中线程之间的通信(五)Thread、Handle、Looper和MessageQueue
			ThreadLocal 往下看之前,需要了解一下Java的ThreadLocal类,可参考博文: 解密ThreadLocal Looper.Handler和MessageQueue 我们分析一下之前的 ... 
