【 CodeForces

摘要:
YetAnotherNumberSequenceDescriptionEveryoneknowswhattheFibonaccisequenceis.Thissequencecanbedefinedbytherecurrencerelation:F1=1,F2=2,Fi=Fi-1+Fi-2(i˃2).We'lldefineanewnumbersequenceAi(k)bytheformula:Ai

Description

Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation:

F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2(i > 2).

We'll define a new number sequenceAi(k)by the formula:

Ai(k) = Fi × ik(i ≥ 1).

In this problem, your task is to calculate the following sum:A1(k) + A2(k) + ... + An(k). The answer can be very large, so print it modulo1000000007(109 + 7).

Input

The first line contains two space-separated integersn,k(1 ≤ n ≤ 1017;1 ≤ k ≤ 40).

Output

Print a single integer — the sum of the firstnelements of the sequenceAi(k)modulo1000000007(109 + 7).

Sample Input

Input
1 1
Output
1
Input
4 1
Output
34
Input
5 2
Output
316
Input
7 4
Output
73825
【分析】
哈哈照着上一题的方法我就弄出来了~~
应该是形如 x^k的形式,x很大,k较小的时候可以用二项式定理展开,求递推式然后矩阵加速。。
【 CodeForces第1张
【 CodeForces第2张
就这样,qpow n次就好啦~
代码如下:
【 CodeForces第3张【 CodeForces第4张
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 #include<cmath>
8 using namespacestd;
9 #define Mod 1000000007
10 #define Maxn 110
11 #define LL long long
12 
13 structnode
14 {
15 LL a[Maxn][Maxn];
16 }t[5];
17 
18 LL c[Maxn][Maxn];
19 LL n,k;
20 
21 voidinit()
22 {
23     memset(c,0,sizeof(c));
24     for(LL i=0;i<=80;i++) c[i][0]=1;
25     for(LL i=1;i<=80;i++)
26      for(LL j=1;j<=80;j++)
27         c[i][j]=(c[i-1][j-1]+c[i-1][j])%Mod;
28 }
29 
30 voidget_m()
31 {
32     for(LL i=k+1;i<=2*k+1;i++)
33 {
34         for(LL j=0;j<=i-k-1;j++) t[0].a[i][j]=c[i-k-1][j];
35         for(LL j=i+1;j<=2*k+2;j++) t[0].a[i][j]=0;
36 }
37     for(LL i=0;i<=k;i++)
38 {
39         for(LL j=0;j<=i;j++) t[0].a[i][j]=t[0].a[i][j+k+1]=c[i][j];
40         for(LL j=i+1;j<=k;j++) t[0].a[i][j]=t[0].a[i][j+k+1]=0;
41         t[0].a[i][2*k+2]=0;
42 }
43     for(LL i=0;i<=2*k+1;i++) t[0].a[2*k+2][i]=0;
44     t[0].a[2*k+2][2*k+2]=t[0].a[2*k+2][k]=1;
45 }
46 
47 voidget_un()
48 {
49     memset(t[1].a,0,sizeof(t[1].a));
50     for(LL i=0;i<=2*k+2;i++) t[1].a[i][i]=1;
51 }
52 
53 voidmul(LL x,LL y,LL z)
54 {
55     for(LL i=0;i<=2*k+2;i++)
56      for(LL j=0;j<=2*k+2;j++)
57 {
58          t[2].a[i][j]=0;
59          for(LL l=0;l<=2*k+2;l++)
60             t[2].a[i][j]=(t[2].a[i][j]+t[y].a[i][l]*t[z].a[l][j])%Mod;
61 }
62     t[x]=t[2];
63 }
64 
65 voidqpow(LL b)
66 {
67 get_un();
68     while(b)
69 {
70         if(b&1) mul(1,0,1);
71         mul(0,0,0);
72         b>>=1;
73 }
74 }
75 
76 intmain()
77 {
78 init();
79     scanf("%lld%lld",&n,&k);
80 get_m();
81 qpow(n);
82     LL ans=0;
83     for(LL i=0;i<2*k+2;i++) ans=(ans+t[1].a[2*k+2][i])%Mod;
84     printf("%lld
",ans);
85     return 0;
86 }
a

2016-09-2616:11:26

免责声明:文章转载自《【 CodeForces》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JVM(java 虚拟机)内存设置Android Graphics专题(1)--- Canvas基础下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

TFS(Team Foundation Server)简介和新手入门

随着VisualStudio产品线中TeamFoundationServer组件的公布,微软使得开发团队在僵化的软件project实践应用中取得了巨大进步。TeamFoundationServer起步TeamFoundationServer是这样一种server产品,它须要部署到软件开发环境中。利用Excel和project能够訪问存储在TeamFounda...

vSphere HA 原理与配置

应当基于可用性需求和群集的特性选择vSphereHA接入控制策略。...

面试了一个 31岁的iOS开发者,思绪万千,30岁以上的程序员还有哪些出路?

前言之前HR给了我一份简历,刚看到简历的第一眼,31岁?31岁,iOS开发工程师,工作经历7年,5年左右都在外包公司,2年左右在创业公司。iOS开发工程师这块,还是很少遇到30岁以上的开发,正好,来了一个30岁的开发,说实话,对我来说,还是蛮期待的,希望对我有所启示。这样的过程持续了半个小时那么年过350岁的程序员还有出路吗?作为一个8年的iOS开发,而且几...

flutter vscode+第三方安卓模拟器

1.首先打开夜曲模拟器2.Win+R,选择cmd,在第三方模拟器安装目录的bin目录下输入夜曲模拟器,然后运行命令:nox_Adb.execonnect127.0.0.1:620013。打开项目终端的vscode并建立连接:adbconnect127.00.1:62001(夜神模拟器的默认端口)4。查看连接:adbdevices或不使用第三方模拟器:1.打开...

uniapp之页面间传递和接收数组

uni-app如何在页面之前发送和传递数组?如果阵列是直接发送和传递的,则收到的消息如下所示。无法获取更多的对象值。接收数组对象的参数。您可以首先将数组转换为JSON字符串,然后在将其传递到页面后将其解析为JavaScript对象。...

CentOS7 复制文件夹和移动文件夹

CentOS7在Linux中复制、移动和删除文件的命令有:cp、mv、rm I。文件复制命令cp命令格式:cp[-adfilprsu]源文件(source)目标文件(destination)cp[option]source1source2source3…directory参数描述:-a:指存档,即复制所有目录-d:如果源文件是连接文件(linkfile...