POJ 1320 Street Numbers Pell方程
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 = b2 + b
两边乘4,构造完全平方项 (2b+1)2 - 8a2 = 1
令 x = 2*b+1;
y = a;
我们就得到了一个形如Pell方程x2 - Dy2 = 1 的式子 x2 - 8y2 = 1
这题就是求Pell方程的第K个解 , 因为方程已经告诉你了
所以我们可以目测出最小解以用来构造矩阵来求出后面的解
下面就是构造系数矩阵的方法:
已知Pell方程为 x2 - Dy2 = 1
为了得到第k个解,我们需要构造系数矩阵
为了得到系数矩阵,我们必须知道该方程的最小特解 x0,y0
于是我们就能得到系数矩阵:

xk yk 就是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 ;
}
POJ 1320 Street Numbers Pell方程的更多相关文章
- POJ 1320 Street Numbers 【佩尔方程】
任意门:http://poj.org/problem?id=1320 Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- POJ 1320 Street Numbers 解佩尔方程
传送门 Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2529 Accepted: 140 ...
- POJ 1320 Street Numbers(佩尔方程)
Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3078 Accepted: 1725 De ...
- POJ 1320:Street Numbers
Street Numbers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2753 Accepted: 1530 De ...
- POJ 2427 Smith's Problem Pell方程
题目链接 : http://poj.org/problem?id=2427 PELL方程几个学习的网址: http://mathworld.wolfram.com/PellEquation.html ...
- Pell方程(求形如x*x-d*y*y=1的通解。)
佩尔方程x*x-d*y*y=1,当d不为完全平方数时,有无数个解,并且知道一个解可以推其他解. 如果d为完全平方数时,可知佩尔方程无解. 假设(x0,y0)是最小正整数解. 则: xn=xn-1*x0 ...
- hdu2281&&POJ1320——Pell方程
hdu2281 输入一个 $N$,求最大的 $n$($n \leq N$)和 $x$,使得 $x^2 = \frac{1^2+2^2+...+n^2}{n}$. 分析: 将右边式子的分子求和化简,有: ...
- Pell方程及其一般形式
一.Pell方程 形如x^2-dy^2=1的不定方程叫做Pell方程,其中d为正整数,则易得当d是完全平方数的时候这方程无正整数解,所以下面讨论d不是完全平方数的情况. 设Pell方程的最小正整数解为 ...
- hdu3293(pell方程+快速幂)
裸的pell方程. 然后加个快速幂. No more tricks, Mr Nanguo Time Limit: 3000/1000 MS (Java/Others) Memory Limit: ...
随机推荐
- 同学们,OpenCV出3.0了,速去围观!
OpenCV3.0 OpenCV > NEWS > OpenCV 3.0 2015-06-04 With a great pleasure and great relief OpenCV ...
- java-proxool 异常
使用 proxool,JDBC连接池,进行批量运行的时候遇到异常: The Thread responsible was named 'Thread-32′, but the last SQL it ...
- NuGet配置代理
https://stackoverflow.com/questions/9232160/nuget-behind-proxy nuget.exe config -set http_proxy=http ...
- Track Active Item in Solution Explorer
Tools-->Options-->Projects and Solutions-->Track Active Item in Solution Explorer
- SOAPUI使用
简介:在开发接口的时候每次验证接口是否正确都需要手动写测试DEMO来验证,使用SOAPUI可以大大减少测试时间. 目录 1.SOPUI介绍... 1 2.SOAPUI使用... 1 2.1新建SOAP ...
- c#同步上下文SynchronizationContext学习笔记
提供在各种同步模型中传播同步上下文的基本功能.同步上下文的工作就是确保调用在正确的线程上执行. 同步上下文的基本操作 Current 获取当前同步上下文 var context = Synchroni ...
- epson 630打印机驱动安装不上
1号机: 连接到630打印机的电脑 2号机: 通过网络连接到630打印机 *现状: 直接将数据线插在2号机上安装打印机时,驱动安装不上,设备管理器中有“!”号 *原因: 可能是已有一台通过网络连接到1 ...
- React开发实时聊天招聘工具 -第六章 登陆注册(2)
1.bodyParser和cookieParser: const bodyParser = require('body-parser') const cookieParser = require( ...
- Node书签
1.开源项目 [译]过去一年25个惊人的开源Node.js项目(2018版) 百度网盘下载助手
- python之路:发附带文件的邮件
发邮件的思路(借用第三方服务): 1.模拟服务器,其中有:服务器地址,发送者地址.发送者的密码 2.创建一个带附件的实例:1.创建一个massage 2.massage包括发送者的地址.接受者的地址. ...