POJ1320 Street Numbers【佩尔方程】
2015-08-11 19:52
246 查看
主题链接:
http://poj.org/problem?id=1320
题目大意:
求解两个不相等的正整数N、M(N<M),使得 1 + 2 + … + N = (N+1) + … + M。输出前10组满足要求
的(N,M)。
思路:
要使 1 + 2 + … + N = (N+1) + … + M,那么 N*(N+1)/2 = (M-N)(M+N+1)/2,即
(2*M+1)^2 - 8*N^2 - 1。令x = 2*M + 1。y = N,就有x^2 - 8*y^2 = 1。就变成了典型的佩尔方程。
已知x1 = 3。y1 = 1,由迭代公式得:
xn = x(n-1)*x1 + d*y(n-1)*y1
yn = x(n-1)*y1 + y(n-1)*x1
那么
x(n+1) = 3*xn + 8*yn
y(n+1) = xn + 3*yn
AC代码:
http://poj.org/problem?id=1320
题目大意:
求解两个不相等的正整数N、M(N<M),使得 1 + 2 + … + N = (N+1) + … + M。输出前10组满足要求
的(N,M)。
思路:
要使 1 + 2 + … + N = (N+1) + … + M,那么 N*(N+1)/2 = (M-N)(M+N+1)/2,即
(2*M+1)^2 - 8*N^2 - 1。令x = 2*M + 1。y = N,就有x^2 - 8*y^2 = 1。就变成了典型的佩尔方程。
已知x1 = 3。y1 = 1,由迭代公式得:
xn = x(n-1)*x1 + d*y(n-1)*y1
yn = x(n-1)*y1 + y(n-1)*x1
那么
x(n+1) = 3*xn + 8*yn
y(n+1) = xn + 3*yn
AC代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int main() { int x,y,x1,y1,px,py,d; x1 = px = 3; y1 = py = 1; d = 8; for(int i = 1; i <= 10; ++i) { x = px*x1 + d*py*y1; y = px*y1 + py*x1; printf("%10d%10d\n",y,(x-1)/2); px = x; py = y; } return 0; }
相关文章推荐
- 一些文章
- 【暑期基础3】X HDU 2076 夹角有多大(题目已修改,注意读题[sic] )
- Sort List
- HDU栈外挂 用c++提交
- JavaWap基础
- 阿里云ECS购买优惠码
- HDU 5375 Gray code(2015年多校联合 动态规划)
- matlab 更改可用内存(最快速有效方法)
- Scala入门到精通——第二十三节 高级类型 (二)
- HDU 5375 Gray code(DP或分情况讨论)
- 【转】HBase客户端API:管理特性 - 架构(schema)定义
- 自定义点击方法target-action
- 《Java开发实战经典》第三章答案3.12
- 载波同步环路的带宽与信噪比相关问题
- webrtc 的回声抵消(aec、aecm)算法简介
- 《Java开发实战经典》第三章答案3.11
- 【译】潜在语义分析Latent Semantic Analysis (LSA)
- Java中使用MongoDB进行增删改查
- hdoj 1301 Jungle Roads 【最小生成树】
- [HDU 1426] Sudoku Killer 数独