A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2。

这个矩阵有点毒。。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
//#include<iostream>
using namespace std; #define LL long long
LL n,x,y;
typedef LL mat[][];
mat a,f,ans;
const int mod=;
void copy(mat &a,mat b)
{
for (int i=;i<=;i++)
for (int j=;j<=;j++)
a[i][j]=b[i][j];
}
void mul(mat a,mat b,mat &ans)
{
mat t;memset(t,,sizeof(t));
for (int i=;i<=;i++)
for (int j=;j<=;j++)
for (int k=;k<=;k++)
t[i][j]=(t[i][j]+a[i][k]*b[k][j]%mod)%mod;
copy(ans,t);
}
void init(mat &a)
{
memset(a,,sizeof(a));
for (int i=;i<=;i++) a[i][i]=;
}
void pow(mat a,LL b,mat &ans)
{
mat tmp,last;copy(tmp,a);init(last);
while (b)
{
if (b&) mul(last,tmp,last);
mul(tmp,tmp,tmp);
b>>=;
}
copy(ans,last);
}
int main()
{
while (~scanf("%lld%lld%lld",&n,&x,&y))
{
memset(a,,sizeof(a));
a[][]=a[][]=a[][]=;
a[][]=x*x%mod;
a[][]=y*y%mod;
a[][]=*x*y%mod;
a[][]=x;a[][]=y;
f[][]=f[][]=f[][]=f[][]=;
pow(a,n,a);
mul(a,f,ans);
printf("%lld\n",ans[][]);
}
return ;
}

最新文章

  1. PHP遍历、删除文件夹中的所有文件
  2. 写了一个简易的GBK文件向UTF8文件转换的工具
  3. oracle常用系统表
  4. SP Flash Tool使用异常集锦
  5. SONATYPE NEXUS搭建MAVEN私服
  6. IplImage 与 QImage 相互转换
  7. 通过nginx配置文件抵御攻击
  8. iOS:BitCode的介绍
  9. number_format
  10. 如何进行shell脚本正确性测试
  11. Learn X in Y minutes(python一页纸代码)
  12. WC2015 冬眠营滚粗记
  13. FromData获取表单数据
  14. aic bic mdl
  15. Python 爬虫工具 —— fake_useragent
  16. hanlp在Python环境中的安装失败后的解决方法
  17. MapReduce中的分布式缓存使用
  18. XDU 1111
  19. nyoj27-水池数目 (求连通块数目)【dfs】
  20. iOS- 如何将非ARC的项目转换成ARC项目(实战)

热门文章

  1. [转]Android APK签名原理及方法
  2. 26款优秀的Android逆向工程工具
  3. ios app跳转拨打电话界面,调用拨打电话功能
  4. Java子类与父类方法的隐藏和覆盖
  5. QWidget标题栏双击事件
  6. Gym - 100676G Training Camp (状压dp)
  7. 框模型中设置内容区域元素占地尺寸box-sizing属性
  8. cf上分的失落-&gt;高兴-&gt;更失落
  9. AT2663 Namori Grundy
  10. windows中彻底卸载mysql