3969 [Mz]平方和【斐波那契平方和】
斐波那契数列:f[0]=0,f[1]=1,f[i]=f[i-1]+f[i-2](i>1)
求f[1]*f[1]+f[2]*f[2]+...+f[n]*f[n]的值

仅一行,一个正整数n
仅一行一个数,即所求的值,由于结果可能很大,需对1,000,000,007取模
3
6
对于100‰的数据,n<=1,000,000=10^6
然而:
对于200‰的数据,n<=9,000,000,000,000,000,000=9*10^18
对于500‰的数据,n<=10^500
对于1000‰的数据,n<=10^50000
分类标签 Tags 点此展开
引理1:
平方求和
#include<cstdio>
using namespace std;
typedef long long ll;ll n;
const ll mod=;
char s[];
struct matrix{ll s[][];}A,F;
ll mul(ll a,ll b){
ll res=;
for(;b;b>>=,a=(a+a)%mod) if(b&) res=(res+a)%mod;
return res;
}
matrix operator *(const matrix &a,const matrix &b){
matrix c;
for(int i=;i<;i++){
for(int j=;j<;j++){
c.s[i][j]=;
for(int k=;k<;k++){
c.s[i][j]+=mul(a.s[i][k],b.s[k][j]);
c.s[i][j]%=mod;
}
}
}
return c;
}
matrix fpow(matrix a,ll p){
matrix ans;
for(int i=;i<;i++) for(int j=;j<;j++) ans.s[i][j]=(i==j);
for(;p;p>>=,a=a*a) if(p&) ans=ans*a;
return ans;
}
void deal(){
for(int i=;s[i];i++){
n=(n*+s[i]-'')%(mod+);
}
}
int main(){
scanf("%s",s);deal();
A.s[][]=A.s[][]=A.s[][]=;A.s[][]=;
F.s[][]=;F.s[][]=F.s[][]=F.s[][]=;
F=fpow(A,n)*F;
ll ans=F.s[][]*F.s[][]%mod;
printf("%lld\n",ans);
return ;
}
3969 [Mz]平方和【斐波那契平方和】的更多相关文章
- Cogs 1708. 斐波那契平方和(矩阵乘法)
斐波那契平方和 ★★☆ 输入文件:fibsqr.in 输出文件:fibsqr.out 简单对比 时间限制:0.5 s 内存限制:128 MB [题目描述] ,对 1000000007 取模.F0=0, ...
- 费马平方和定理&&斐波那契恒等式&&欧拉四平方和恒等式&&拉格朗日四平方和定理
费马平方和定理 费马平方和定理的表述是:奇素数能表示为两个平方数之和的充分必要条件是该素数被4除余1. 1. 如果两个整数都能表示为两个平方数之和的形式,则他们的积也能表示为两个平方数之和的形式. $ ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- python迭代器实现斐波拉契求值
斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例 ...
- Ural 1225. Flags 斐波那契DP
1225. Flags Time limit: 1.0 secondMemory limit: 64 MB On the Day of the Flag of Russia a shop-owner ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- js中的斐波那契数列法
//斐波那契数列:1,2,3,5,8,13…… //从第3个起的第n个等于前两个之和 //解法1: var n1 = 1,n2 = 2; for(var i=3;i<101;i++){ var ...
- 剑指Offer面试题:8.斐波那契数列
一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- 算法: 斐波那契数列C/C++实现
斐波那契数列: 1,1,2,3,5,8,13,21,34,.... //求斐波那契数列第n项的值 //1,1,2,3,5,8,13,21,34... //1.递归: //缺点:当n过大时,递归 ...
随机推荐
- linux 重启网卡的方法
http://blog.163.com/drzxqing@126/blog/static/59351445201052392516841/
- Android Unique Device ID
There are several occasions when the unique identifier of a device is required. For instance you nee ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- java 虚函数
猜猜这里的代码输出的结果是多少? package test; public class ConstructorExample { static class Foo { int i; Foo() { i ...
- django 查询集 API
filter 表示=, 返回一个新的QuerySet,包含与给定的查询参数匹配的对象.exclude 表示!=. 返回一个新的QuerySet,它包含不满足给定的查找参数的对象. annotate 使 ...
- C++刷题——2830: 递归求1*1+2*2+3*3+……+n*n
Description 定义一个递归函数sum int sum(int n); //函数声明,返回12+22+32+--+n2的和 注意:sum为递归函数 Input 正整数n的值 Output 12 ...
- win7系统如何配置JAVA环境变量
1.在“计算机”右击选择“属性” 2.点击“高级系统设置” 3.点击“环境变量” 4.点击系统变量下面的“新建” (1)新建->变量名:JAVA_HOME变量值 C:\Program Files ...
- 分享 stormzhang的Andoid学习之路
硬件 电脑–推荐Mac 首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面的开发工具简直难以恭维,尤其命令行超级难用,而Linux自己必须得花不少时 ...
- Unix系统编程(四)creat系统调用
我好疑惑啊,creat系统调用为啥没有以e结尾呢?搞得我每次都怀疑我敲错了. 在早期的UNIX实现中,open只有两个参数,无法创建新文件,而是使用creat系统调用创建并打开一个新文件. int c ...
- python网络编程学习笔记(10):webpy框架
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...
