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 ...
随机推荐
- mysql5.7忘记密码
注意:mysql5.7 user表密码字段由password改为authentication_string 1.service mysql stop 2.mysqld_safe --skip-gran ...
- shell 脚本杀死后台由php脚本控制运行的所有php脚本和java程序
效果: 运行命令: ./killallphpjavarm.sh java 源码: #!/bin/sh#根据进程名杀死进程#FileName: killjavaphprm.sh pgrep php ki ...
- Error:(1, 1) error: illegal character: \65279解决方法
NotePad++,选择格式,选择转为UTF-8无BOM格式,即可解决,感谢http://tzwzero-163-com.iteye.com/blog/1696605
- #define 小知识
#define N 15 #define M 2+N #define W 2*M 问3*W的结果是多少? 结果为27: 知识点:define只能进行非常简单的运算,简单来说就是仅仅是将自身的值代入,而 ...
- docker 数据卷 权限
1,在运行容器的时候,给容器加特权: 示例:docker run -i -t --privileged=true -v /home/docs:/src waterchestnut/nodejs:0.1 ...
- jQuery HTML 操作
jQuery 包含很多供改变和操作 HTML 的强大函数. 改变 HTML 内容 语法 $(selector).html(content) html() 函数改变所匹配的 HTML 元素的内容(inn ...
- 关于localstorage的几个测试
1.如果在同一主域名下,localstorage能访问吗? 测试: 在www\index.php 中写入 localstorage 在www\wex5fortp\ui 目录下能否读到?? 结论:可以得 ...
- C# DataGridView控件清空数据完美解决方法
C# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时: 1.DataSource为NULL(DataGridView.DataSource= null;)这样会将 ...
- 转载 --ios 模型-setValuesForKeysWithDictionary
应用场景:app请求后端数据,返回的数据是JSON形式,如: { "is_favor" = 0; "is_follow" = 0; "is_prais ...
- .NET HttpClient扩展
/// <summary> /// HttpClient扩展类 /// </summary> public static class HttpClientExtensions ...