题目

求 $\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——等比数列求和&&等价替换的更多相关文章

  1. [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)

    Power of Fibonacci Time Limit: 5 Seconds      Memory Limit: 65536 KB In mathematics, Fibonacci numbe ...

  2. Power of Matrix 等比数列求和 矩阵版!

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  3. hdu 1588(Fibonacci矩阵求和)

    题目的大意就是求等差数列对应的Fibonacci数值的和,容易知道Fibonacci对应的矩阵为[1,1,1,0],因为题目中f[0]=0,f[1]=1,所以推出最后结果f[n]=(A^n-1).a, ...

  4. [hdu 4959]Poor Akagi 数论(卢卡斯数,二次域运算,等比数列求和)

    Poor Akagi Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  5. POJ 1845 (约数和+二分等比数列求和)

    题目链接: http://poj.org/problem?id=1845 题目大意:A^B的所有约数和,mod 9901. 解题思路: ①整数唯一分解定理: 一个整数A一定能被分成:A=(P1^K1) ...

  6. 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂

    原题:ZOJ 3774  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3774 --------------------- ...

  7. hoj3152-Dice 等比数列求和取模

    http://acm.hit.edu.cn/hoj/problem/view?id=3152 Dice My Tags (Edit) Source : Time limit : sec Memory ...

  8. 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 ...

  9. luogu1397 [NOI2013]矩阵游戏 (等比数列求和)

    一个比较显然的等比数列求和,但有一点问题就是n和m巨大.. 考虑到他们是在幂次上出现,所以可以模上P-1(费马小定理) 但是a或c等于1的时候,不能用等比数列求和公式,这时候就要乘n和m,又要变成模P ...

随机推荐

  1. TCP/IP学习笔记6--TCP/IP模型

    "五月的风慢慢地吹过湖面,泛起波浪层层,一只鸟儿飞过来,在我面前婉转歌唱" TCP/IP是当今计算机网络世界使用最为广泛的协议.该方面的知识对于那些想做网络编程的人来说是只至关重要 ...

  2. 030 Android 第三方开源下拉框:NiceSpinner的使用+自定义Button样式+shape绘制控件背景图+图片选择器(selector)

    1.NiceSpinner下拉框控件介绍 Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框 ...

  3. [转帖]TPC-C解析系列02_OceanBase如何做TPC-C测试

    TPC-C解析系列02_OceanBase如何做TPC-C测试 http://www.itpub.net/2019/10/08/3333/   导语: 蚂蚁金服自研数据库OceanBase登顶TPC- ...

  4. (一)linux 学习 -- 在文件系统中跳转

    The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap03.html 文章目录 文件系统 根目录 打 ...

  5. PAT(B) 1059 C语言竞赛(C)

    题目链接:1059 C语言竞赛 (20 point(s)) 题目描述 C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 冠军将赢得一份" ...

  6. string类型的解释与方法

    基本概念 string(严格来说应该是System.String) 类型是我们日常coding中用的最多的类型之一.那什么是String呢?^ ~ ^ String是一个不可变的连续16位的Unico ...

  7. 自定义AuthorizeFilter

    using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization.Infrastructure; u ...

  8. robot framework 关键字Switch Browser和Select Window的区别

    Switch Browser针对的是2个Open Browser以上的切换:Select Window针对的是1个Open Browser里面某个点击事件打开了另外一个新窗口 1.例子 Switch ...

  9. JavaScript 基础(数据类型、函数、流程控制、对象)

    一.JavaScript概述 1.1 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名Script ...

  10. 【转】JRE和JDK的区别

    用一幅图来宏观的看一下 从图中可以看出JDK包含JRE包含JVM. JDK:java development kit (java开发工具) JRE:java runtime environment ( ...