求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的更多相关文章

  1. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  2. #26 fibonacci seqs

    Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...

  3. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  4. 斐波拉契数列(Fibonacci) 的python实现方式

    第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...

  5. fibonacci数列(五种)

    自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...

  6. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  7. Fibonacci 数列算法分析

    /************************************************* * Fibonacci 数列算法分析 ****************************** ...

  8. 算法系列:Fibonacci

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  9. UVa #11582 Colossal Fibonacci Numbers!

    巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and  ...

随机推荐

  1. (转)深入理解javascript连续赋值表达式

    引入 今天逛园子的时候看到一道javascript面试题,是关于连续赋值的,正好最近读jQuery源码经常看到这种连续赋值的表达式,所以很感兴趣. 废话不多说,来看题: var a = {n: 1} ...

  2. git 忽视大小写

    git config core.ignorecase false http://stackoverflow.com/questions/3011625/git-mv-and-only-change-c ...

  3. 用sass写栅格系统

    为了验证学习sass的效果,自己写了个简单的栅格系统.

  4. SQL、Linq、lamda表达式 同一功能不同写法

    一.SQL.Linq.lamda表达式 同一功能不同写法 SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employe ...

  5. Redis从基础命令到实战之字符串类型

    字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据.本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注 ...

  6. zstuoj 4243 牛吃草 ——(二分+两圆交)

    这题上次补了以后忘记写博客了,现在补一下. 有两个注意点,第一是两圆相交的模板.可以通过任意一种情况手推出来. 第二是,实数二分要注意不用ans记录为妙,因为可能因为eps过小,导致ans无法进入记录 ...

  7. js获取IP和MAC地址

    1.IP 百度一下有很多 可以用这个 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> ...

  8. OpenGL ES crash notes 01 - Nice to meet you

    这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...

  9. 从零构建一个简单的 Python Web框架

    为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何 ...

  10. C#读写XML

    1.根据xml格式的string生成xml文件并保存到本地 /// <summary> /// 保存XML到磁盘 /// </summary> /// <param na ...