求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. gfw列表

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

  2. 1-13 代理ARP和RARP

    一.代理ARP(Proxy ARP) 因为路由器有阻住广播的作用,如果我们要访问一台远端的主机,那么我们封装的并不是远端的目的MAC地址,而是我们网关的MAC地址. 当我们的网关出现故障,就需要给他重 ...

  3. Java入门记(二):向上转型与向下转型

    在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...

  4. python之路-Day6

    time & datetime模块 #_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) # ...

  5. IOS系列swift语言之课时三

    今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...

  6. MFC窗口乱弹问题

    操作过程将子窗口放到主窗口的OnInitDialog函数和OnPaint函数中调用,在本机没有异常,放到其他机器上发现子窗口莫名其妙的被调用,跟踪发现主窗口这两个函数不止调用一次,中间会因为其他如按钮 ...

  7. pdo 事物的处理

  8. JSP(include指令与<jsp:include>动作的区别)

    <%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...

  9. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

  10. Redis的5种数据结构

    Redis可以存储可以存储键与5种不同数据结构类型之间的映射. 五种结构类型为:STRING(字符串).LIST(列表).SET(集合).HASH(散列).ZSET(有序集合). 1.字符串类型Str ...