HDU 3117 Fibonacci Numbers(矩阵)
Fibonacci Numbers
【题目链接】Fibonacci Numbers
【题目类型】矩阵
&题解:
后4位是矩阵快速幂求,前4位是用log加Fibonacci通项公式求,详见上一篇博客
&代码:
#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
const int maxn= 2 +9;
int a[90]={0};
struct Mat
{
ll m[maxn][maxn];
};
int n=2,x,M=1e8,M2=1e4;
Mat Mul(Mat A,Mat B)
{
Mat C;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
C.m[i][j]=0;
for(int k=0;k<n;k++){
C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j])%M;
}
}
return C;
}
Mat bPow(Mat A,ll k)
{
Mat B;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
B.m[i][j]=(i==j);
}
}
while(k){
if(k&1)
B=Mul(B,A);
A=Mul(A,A);
k>>=1;
}
return B;
}
Mat A;
int main()
{
freopen("E:1.txt","r",stdin);
while(cin>>x){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
A.m[i][j]=1;
A.m[1][1]=0;
if(x==0)
puts("0");
else if(x==1)
puts("1");
else{
A=bPow(A,x-1);
if(x<40)
cout<<A.m[0][0]%M<<endl;
else {
double u1=log10(1/sqrt(5)),u2=log10((1+sqrt(5))/2);
double t=u1+x*u2;
t=t-(int)t;
cout<<(int)(pow(10,t)*1000);
printf("...%04d\n",A.m[0][0]%M2);
}
}
}
return 0;
}
HDU 3117 Fibonacci Numbers(矩阵)的更多相关文章
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
- HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)
HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意: 求第n个斐波那契数的 ...
- HDU 3117 Fibonacci Numbers( 矩阵快速幂 + 数学推导 )
链接:传送门 题意:给一个 n ,输出 Fibonacci 数列第 n 项,如果第 n 项的位数 >= 8 位则按照 前4位 + ... + 后4位的格式输出 思路: n < 40时位数不 ...
- hdu 3117 Fibonacci Numbers
这道题其实也是水题来的,求Fibonacci数的前4位和后4位,在n==40这里分界开.后4位不难求,因为n达到了10^18的规模,所以只能用矩阵快速幂来求了,但在输出后4位的时候一定要注意前导0的处 ...
- HDU 3117 Fibonacci Numbers 数学
http://acm.hdu.edu.cn/showproblem.php?pid=3117 fib是有一个数学公式的. 这里的是标准的fib公式 那么fib = 1 / sqrt(5) * ((1 ...
- Project Euler 435 Polynomials of Fibonacci numbers (矩阵快速幂)
题目链接: https://projecteuler.net/problem=435 题意: The Fibonacci numbers $ {f_n, n ≥ 0}$ are defined rec ...
- HDU:Gauss Fibonacci(矩阵快速幂+二分)
http://acm.hdu.edu.cn/showproblem.php?pid=1588 Problem Description Without expecting, Angel replied ...
- HDU - 1588 Gauss Fibonacci (矩阵高速幂+二分求等比数列和)
Description Without expecting, Angel replied quickly.She says: "I'v heard that you'r a very cle ...
- HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)
HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意: g(i)=k*i+b;i为变量. 给出 ...
随机推荐
- 如何使用ffmpeg
https://blog.csdn.net/minger1202/article/details/52468986 解码 https://www.jianshu.com/p/c6cfe2edd083 ...
- readonly enable
<input type="text" id="UserName" style="width:20%;" disabled=" ...
- SQLAlchemy中时间格式化及将时间戳转成对应时间的方法-mysql
https://blog.csdn.net/guoqianqian5812/article/details/80175866 方法很简答,都是借助于mysql数据库提供的函数将时间格式化方法 func ...
- redis有序集合性能 列表、集合、有序集合
https://www.cnblogs.com/pirlo21/p/7120935.html 1.1 列表 列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串 ...
- python导入方法,软件目录
软件目录 import os #print(__file__)#打印当前文件相对路径(文件,发要) import sys BASE_DIR=os.path.dirname(os.path.dirnam ...
- codechef Sum of Cubes 图论
正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...
- JavaScript学习笔记--语法二
条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...
- 安全需求-建模归类——By Me
漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞:大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集.可以用如下这个图来展 ...
- VS Code编辑器对git项目的支持
使用git随便clone一个项目下来, 然后用vscode打开项目, 随便打开某个文件, 添加几行代码: 9-11行是我新添加的, 左边绿色的竖条(点击就会看到明细)就表示这几行是新添加的. 然后修改 ...
- react native touchable
<Button style={{marginTop: 30}} onPress={() => { Alert.alert("你点击了按钮!"); }} onPressI ...