hdu 4990 矩阵快速幂
来源:互联网 发布:霓虹灯效果图制作软件 编辑:程序博客网 时间:2024/04/30 23:06
递推公式:f(n)=2*f(n-2)+f(n-1)+1
数据量太大 矩阵快速幂
#include <cstdio>
#include <iostream>#include <stdlib.h>
#include <string.h>
using namespace std;
long long int mod;
const int m = 3;
struct Matrix
{
long long int mat[3][3];
};
Matrix mul(Matrix a,Matrix b)//Matrix为结构体类型
{
Matrix C;
memset(C.mat,0,sizeof(C.mat));
for(int i=0; i<m; i++) //m,m,m不一定相同
for(int j=0; j<m; j++)
for(int k=0; k<m; k++)
/*c.m[i][k]+=((a.m[i][j]*b.m[j][k])%MOD)%MOD;
c.m[i][k]%=MOD;*/
C.mat[i][j]=(C.mat[i][j]+(a.mat[i][k]%mod)*(b.mat[k][j]%mod))%mod;
return C;
}
Matrix power(Matrix a,int x)
{
Matrix ret;
memset(ret.mat,0,sizeof(ret.mat));
for(int i=0; i<m; i++)
ret.mat[i][i]=1;
while(x)
{
if(x&1)ret=mul(ret,a);
a=mul(a,a);
x=x/2;
}
return ret;
}
int main()
{
long long int n;
Matrix a,b;
while(cin>>n>>mod)
{
memset(a.mat,0,sizeof(a.mat));
memset(b.mat,0,sizeof(b.mat));
a.mat[0][0] = 1;
a.mat[0][1] = 2;
a.mat[0][2] = 1;
b.mat[0][1] = 2;
b.mat[1][0] = 1;
b.mat[1][1] = 1;
b.mat[2][1] = 1;
b.mat[2][2] = 1;
if(n == 1) cout<<n%mod<<endl;
if(n == 2) cout<<n%mod<<endl;
if(n>2){
b = power(b,n-2);
a = mul(a,b);
cout<<a.mat[0][1]%mod<<endl;
}
//printf("%d\n", fast_mod(n));
}
return 0;
}
0 0
- hdu 4990 矩阵快速幂
- hdu 4990 矩阵快速幂
- hdu 4990 Reading comprehension (矩阵快速幂)
- hdu 4990 Reading comprehension(矩阵快速幂)
- [矩阵快速幂] hdu 4990 Reading comprehension
- HDU - 4990 Reading comprehension (矩阵快速幂)
- HDU 4990 Reading comprehension (矩阵快速幂)
- hdu 4990 Reading comprehension 矩阵快速幂
- hdu-4990 Reading comprehension(快速幂+矩阵)
- 【矩阵快速幂】hdu 1575
- 【矩阵快速幂】hdu 1757
- hdu 2604 矩阵快速幂
- hdu-1575矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 1575(矩阵快速幂)
- hdu 3306 矩阵快速幂
- hdu 1757 矩阵快速幂
- hdu 1575 矩阵快速幂
- 嵌入式linux驱动-输入子系统笔记
- jQuery的选择器中的通配符使用介绍
- js特效01动画效果及页面固定导航栏
- Spring配置 在xml和java代码中读取properties文件
- Android冷启动实现APP秒开
- hdu 4990 矩阵快速幂
- 利用Iterator接口输出Map集合的步骤
- C++ 实验3-2本月有几天?
- 单点登录的三种实现方式
- Python 模块学习:os模块
- Android自定义属性点出来记录(命名空间没有写对)
- PHP语法
- 网易2017年秋招第三题
- jQuery学习教程二十: jQuery 遍历