重操旧业——pell方程

pmars 2010-05-24 06:25:42
大家看看这这个帖子,我要问的还是这个问题,回头,我好好想了一下,怎么计算10^14内的解……
http://topic.csdn.net/u/20100522/22/4e4b98c8-4644-4445-8751-13a6b77496b9.html?77467

对michael122疑惑:
本来的题的意思:
输入两个数据a,b,之后求出有多少个n使得1+2+...+m = n^2(a<=m,n<=b)

比如:
case 1 :
input: 1 2
output: 1
理由:1 = 1^2
case 2 :
input: 6 8
ouput: 1
理由:1+2+...+8 = 6^2

这个问题我还是不太理解,那么大的数据怎么运算出来的,怎么求解的....
...全文
230 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pmars 2010-05-26
  • 打赏
  • 举报
回复
数学就是强大,知道这些了,那道题就简单的不能在简单了!
失败啊……
pmars 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 litaoye 的回复:]
先求出一组最小解3和1(x0,y0),根据pell方程的递推公式

x(n) = x(n-1) * x0 + d * y(n) * y0
y(n) = x(n-1) * y0 + y(n-1) * x0

本题d = 8,就是转化为标准式后,y^2的系数


引用 4 楼 pmars 的回复:

引用 3 楼 litaoye 的回复:
x*(x+1) = 2y^2
x^2 ……
[/Quote]
看了你的公式:
x(n) = x(n-1) * x0 + d * y(n) * y0
y(n) = x(n-1) * y0 + y(n-1) * x0
应该是
x(n) = x(n-1) * x0 + d * y(n-1) * y0
y(n) = x(n-1) * y0 + y(n-1) * x0
吧!这样能和上面的对上,嘿嘿!
FancyMouse 2010-05-26
  • 打赏
  • 举报
回复
pell方程找到一组解就有通解了。麻烦的是找第一组解。最坏的情况是基本解的*长度*是O(sqrt(d))的,这里d无平方因子。

当然这里d=2,所以直接就能干出来了
绿色夹克衫 2010-05-25
  • 打赏
  • 举报
回复
先求出一组最小解3和1(x0,y0),根据pell方程的递推公式

x(n) = x(n-1) * x0 + d * y(n) * y0
y(n) = x(n-1) * y0 + y(n-1) * x0

本题d = 8,就是转化为标准式后,y^2的系数

[Quote=引用 4 楼 pmars 的回复:]

引用 3 楼 litaoye 的回复:
x*(x+1) = 2y^2
x^2 + x = 2y^2

(x + 0.5)^2 = 2y^2 + 0.25
(2x + 1)^2 = 8y^2 + 1

设2x + 1 = k

k^2 - 8y^2 = 1
k0 = 3,y0 = 1

k1 = 3*3 + 8*1*1
y1 = 3*1 + 1*3


C# cod……
[/Quote]
pmars 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
x*(x+1) = 2y^2
x^2 + x = 2y^2

(x + 0.5)^2 = 2y^2 + 0.25
(2x + 1)^2 = 8y^2 + 1

设2x + 1 = k

k^2 - 8y^2 = 1
k0 = 3,y0 = 1

k1 = 3*3 + 8*1*1
y1 = 3*1 + 1*3


C# code

b = 1, n = 1
b =……
[/Quote]
k1 and y1 是怎么推出来的啊?
绿色夹克衫 2010-05-24
  • 打赏
  • 举报
回复
x*(x+1) = 2y^2
x^2 + x = 2y^2

(x + 0.5)^2 = 2y^2 + 0.25
(2x + 1)^2 = 8y^2 + 1

设2x + 1 = k

k^2 - 8y^2 = 1
k0 = 3,y0 = 1

k1 = 3*3 + 8*1*1
y1 = 3*1 + 1*3


b = 1, n = 1
b = 8, n = 6
b = 49, n = 35
b = 288, n = 204
b = 1681, n = 1189
b = 9800, n = 6930
b = 57121, n = 40391
b = 332928, n = 235416
b = 1940449, n = 1372105
b = 11309768, n = 7997214
b = 65918161, n = 46611179
b = 384199200, n = 271669860
b = 2239277041, n = 1583407981
b = 13051463048, n = 9228778026
b = 76069501249, n = 53789260175
b = 443365544448, n = 313506783024
b = 2584123765441, n = 1827251437969
b = 15061377048200, n = 10650001844790
b = 87784138523761, n = 62072759630771
b = 511643454094368, n = 361786555939836
b = 2982076586042449, n = 2108646576008245
b = 17380816062160328, n = 12290092900109634
b = 101302819786919521, n = 71631910824649559
b = 590436102659356800, n = 417501372047787720

using System;

namespace CSharpTest
{
class Program
{
public static void Main()
{
int d = 8, length = 24;
long[,] an = new long[length, 2];
an[0, 0] = 3;
an[0, 1] = 1;

for (int i = 1; i < length; i++)
{
an[i, 0] = an[0, 0] * an[i - 1, 0] + d * an[i - 1, 1] * an[0, 1];
an[i, 1] = an[0, 0] * an[i - 1, 1] + an[i - 1, 0] * an[0, 1];
Console.WriteLine("b = {0}, n = {1}", (an[i, 0] - 1) >> 1, an[i, 1]);
}
}
}
}

pmars 2010-05-24
  • 打赏
  • 举报
回复
抱歉 连接没有弄好:
=http://topic.csdn.net/u/20100522/22/4e4b98c8-4644-4445-8751-13a6b77496b9.html?85515
不知道这样行不行,恩,sf一下……

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧