http://poj.org/problem?id=1320

题意很简单,有序列 1,2,3...(a-1),a,(a+1)...b  要使以a为分界的 前缀和 和 后缀和 相等 求a,b

因为序列很特殊所以我们用数学方法就可以解决 :

求和:  a*(a-1)/2 = (a+1+b)(b-a)/2

化简: 2a2  = b+ b

两边乘4,构造完全平方项 (2b+1)2 - 8a2  = 1

令 x = 2*b+1;

y = a;

我们就得到了一个形如Pell方程x- Dy2  = 1  的式子 x- 8y2  = 1

这题就是求Pell方程的第K个解 , 因为方程已经告诉你了

所以我们可以目测出最小解以用来构造矩阵来求出后面的解

下面就是构造系数矩阵的方法:


已知Pell方程为 x- Dy2  = 1

为了得到第k个解,我们需要构造系数矩阵

为了得到系数矩阵,我们必须知道该方程的最小特解 x0,y0

于是我们就能得到系数矩阵:

xk y就是Pell方程的第k个解


对于Pell方程最小特解的求法,可以参照我上一篇 http://www.cnblogs.com/Felix-F/p/3222741.html

当然这题一眼就能看出最小特解为x=3,y=1

用矩阵快速幂小加了一下速                   (应该是逗比了..这样反而复杂度高了....直接记录各层次的矩阵就行...


struct matrix
{
LL ma[][];
};
int n = ;
matrix operator * (matrix a,matrix b)
{
matrix temp;
memset(temp.ma,,sizeof(temp.ma));
for(int i = ; i < n ; i++)
for(int j = ; j < n ; j++)
for(int k = ; k < n ; k++)
temp.ma[i][j] = temp.ma[i][j] + (a.ma[k][i] * b.ma[j][n-k-]);
return temp;
}
matrix operator + (matrix a,matrix b)
{
for(int i = ; i < n ; i++)
for(int j = ; j < n ; j++)
a.ma[i][j] = (a.ma[i][j] + b.ma[i][j]) ;
return a;
}
matrix m_pow(matrix a,int n)
{
if(n == ) return a;
matrix temp = m_pow(a,n/);
if(n & ) return temp * temp * a;
else return temp * temp ;
}
int main()
{
matrix a;
a.ma[][] = ;
a.ma[][] = ;
a.ma[][] = ;
a.ma[][] = ;
for(int i = ;i <= ; i++)
{
matrix tmp = m_pow(a,i);
LL s1 = tmp.ma[][] * + tmp.ma[][] * ;
LL b = (s1-)/;
LL s2 = tmp.ma[][] * + tmp.ma[][] * ;
LL a = s2;
printf("%10.lld%10.lld\n",a,b);
}
return ;
}

最新文章

  1. android 插件化 模块化开发
  2. Adapter 适配器模式
  3. Ruby on Rails Session 1: How to Build a Ruby on Rails on the Ubuntu.
  4. mycat实例(2)
  5. 修改数据库用户名--CMD环境执行有效
  6. stl string常用函数
  7. Nginx集群之WCF大文件上传及下载(支持6G传输)
  8. 复习HTML+CSS(6)
  9. LeetCode【101. 对称二叉树】
  10. Servlet中response、request乱码问题解决
  11. win7安装linux CentOS7双系统实践
  12. Codeforces.472F.Design Tutorial: Change the Goal(构造 线性基 高斯消元)
  13. 第三次spring会议
  14. c++ 出现“ error LNK2019: 无法解析的外部符号 该符号在函数 中被引用&quot;错误原因
  15. 20170720 Celery 异步任务处理到Sql Server 发生死锁
  16. POJ3111 K Best 2017-05-11 18:12 31人阅读 评论(0) 收藏
  17. 利用mask-image蒙层编写异形头像
  18. [Opencv]图像的梯度与边缘检测(转)
  19. js:自动亮起100盏灯
  20. CentOS7下开启端口

热门文章

  1. 多client并发登录
  2. 21. 【intellij idea】Project Structure 讲解
  3. WebServic调用天气预报服务
  4. 多校-HDU 5351 MZL&#39;s Border 数学规律
  5. Linux桌面词典 星际译王(StarDict)
  6. 为什么linux驱动中变量或者函数都用static修饰?(知乎问题)
  7. 5G时代即将到来,有线网络WiFi会消失不见吗?
  8. b模式处理文件
  9. python 发送邮件 &lt;QQ+腾讯企业邮箱&gt;
  10. 紫书 例题 9-12 UVa 12186 (树形dp)