ZOJ3774_Power of Fibonacci
求fibonacci数列前N个数的K次方和。
通项公式:F[n]=((1+sqrt(5))/sqrt(5)-(1-sqrt(5))/sqrt(5))/sqrt(5)。
有点乱,不过由于可以保证最后的结果是一个整数,所有所有的根号都可以化为整数进行取模和逆元运算。
首先解二次同余方程,X^2=n (mod M),显然,当n=5的时候,X就可以相当于5了。
后面的都可以替换掉。
然后就变成了 F[n]=(A^n+B^n)*C。
这里通过二项式展开,分别对每一项进行计算,同时又可以发现,每一项求和其实是一个等比数列,于是,就可以直接搞了。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#define M 1000000009
#define maxn 100100
typedef long long ll;
using namespace std; ll w,a,m,root,inv;
ll A[maxn],B[maxn];
ll n,k,ans,cur,now;
ll AAA,BBB;
int T; struct twice{
ll A,B;
twice() {}
twice(ll AA,ll BB) { A=AA,B=BB; }
void mul(twice T){
ll aa=A*T.A+(B*T.B)%M*w,bb=A*T.B+B*T.A;
A=aa%M,B=bb%M;
}
}; ll power(ll A,ll B,ll C)
{
ll tot=;
while (B){
if (B&) tot=tot*A%C;
A=A*A%C,B>>=;
}
return tot;
} twice power(twice T,ll y)
{
twice C(,);
while (y){
if (y&) C.mul(T);
T.mul(T),y>>=;
}
return C;
} ll getroot()
{
for (;;){
a=rand()%M;
w=(a*a-+M)%M;
if (power(w,M/,M)!=) break;
}
return power(twice(a,),(M+)/).A;
} void _init()
{
root=getroot();
A[]=B[]=;
for (int i=; i<maxn; i++){
A[i]=(A[i-]*i)%M;
B[i]=power(A[i],M-,M);
}
inv=B[];
AAA=(+root)*inv%M;
BBB=(M+-root)*inv%M;
} int main()
{
_init();
scanf("%d",&T);
while (T--){
scanf("%lld%lld",&n,&k);
ans=;
for (int i=; i<=k; i++){
cur=A[k]*(B[i]*B[k-i]%M)%M;
if (i&) cur=M-cur;
now=power(AAA,k-i,M)*power(BBB,i,M)%M;
if (now>) now=((power(now,n+,M)-now)*power(now-,M-,M)%M+M)%M;
else now=now*n%M;
(ans+=cur*now)%=M;
}
ans=ans*power(root,k*(M-),M)%M;
printf("%d\n",(int)ans);
}
return ;
}
ZOJ3774_Power of Fibonacci的更多相关文章
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- #26 fibonacci seqs
Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...
- 关于java的递归写法,经典的Fibonacci数的问题
经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...
- 斐波拉契数列(Fibonacci) 的python实现方式
第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...
- fibonacci数列(五种)
自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- Fibonacci 数列算法分析
/************************************************* * Fibonacci 数列算法分析 ****************************** ...
- 算法系列:Fibonacci
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- UVa #11582 Colossal Fibonacci Numbers!
巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and ...
随机推荐
- 【231】◀▶ 利用 IDL 读取 TIFF 数据
参考:Create Latitude/Longitude Arrays for GeoTIFF Image 用到的函数为 READ_TIFF,通过此函数可以获取 TIFF 数据的数组信息,同时可以获取 ...
- 正则表达式提取string 中的表名
简单版本: Regex reg = new Regex(@"(?i)\bfrom\b(?![^\[\]]*\])\s+(\[[^\[\]]+\]|\S+)"); MatchColl ...
- SQL ROW_NUMBER()实现取组内最新(最大)的数据
SELECT * FROM(select ROW_NUMBER() over(partition BY sid order by cscore desc) as tid,sid,cname,cscor ...
- c#winform窗体嵌入
最近开发项目,错误的理解了需求,自己做了个窗体的嵌套,虽然是错误的理解了,但是功能还是实现了,做下标记,需要时可以拿来看看. 新建两个窗体Form1和Form2,现在需要将Form2显示到Form1里 ...
- shell编程学习
1.项目中用到Linux的crontrab Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,但是也不是非常复杂,基本上用过一遍就能记住了,关键是要记住/var/spool/cr ...
- TStringList的bug问题
今天测试发现用TStringList进行字符分隔的时候 ,如果被分隔对象中含有空格就有产生发隔错误 方案一:可以用其它的函数来代替 方案二:Items.StrictDelimiter:= True;
- win7 双屏双任务栏
扩展屏幕下都显示任务栏!!! 第一步:Dual Monitor Taskbar 下载 下载链接:链接: http://pan.baidu.com/s/1pKxYUFL 密码: gu5c 第二步:安装完 ...
- form表单reset表格并执行搜索
其中reset() 不需要定义 search():是你执行的搜索的函数 <html> <head> <title>sf</title></head ...
- 关于readdir返回值中struct dirent.d_type的取值有关问题(转)
关于readdir返回值中struct dirent.d_type的取值问题 原网页链接 http://www.gnu.org/software/libc/manual/html_node/Direc ...
- iOS错误总结(三)
1.如果tableView设置为分组的样式(默认是有cell之间的分割线,可以设置颜色),默认有组以及组尾的高度 需要手动在组头组尾的代理方法中进行组高的设置(如果想设置为0,最好写0.01) 2.组 ...