文章目录

  • 前言
  • 标准型佩尔方程
    • 性质
    • 求最小解
      • 暴力写法
      • 连分数写法
  • 例题
  • 非标准型佩尔方程
    • 额外证明
  • 求解没有xy项的二元二次丢番图方程
  • 例题
  • 后记

前言

这是一篇欠了半年多的博客,期间笔者遇到了诸多类似问题,故决定做出总结性结论。

标准型佩尔方程

形如x2−Dy2=1(D>0)x^2-Dy^2=1(D>0)x2−Dy2=1(D>0)的方程,即为标准型佩尔方程。

性质

1.容易得到,{x=±1y=0\begin{cases}x=\pm1\\y=0\end{cases}{x=±1y=0​必是该方程的解。
若DDD为平方数,则只有这种解,反之则有无数多组解。
证明略,见百度百科。
2.若一组解(x1,y1)(x_1,y_1)(x1​,y1​)是非(±1,0)(\pm1,0)(±1,0)的最小正整数解(即DDD为非平方数),则{xn=xn−1x1+Dyn−1y1yn=xn−1y1+yn−1x1\begin{cases}x_n=x_{n-1}x_1+Dy_{n-1}y_1\\y_n=x_{n-1}y_1+y_{n-1}x_1\end{cases}{xn​=xn−1​x1​+Dyn−1​y1​yn​=xn−1​y1​+yn−1​x1​​
或者可以写成xn+Dyn=(x1+Dy1)nx_n+\sqrt{D}y_n=(x_1+\sqrt{D}y_1)^{n}xn​+D​yn​=(x1​+D​y1​)n
或者写成
xn=(x1+Dy1)n+(x1−Dy1)n2x_n=\frac{(x_1+\sqrt{D}y_1)^n+(x_1-\sqrt{D}y_1)^n}{2}xn​=2(x1​+D​y1​)n+(x1​−D​y1​)n​
yn=(x1+Dy1)n−(x1−Dy1)n2Dy_n=\frac{(x_1+\sqrt{D}y_1)^n-(x_1-\sqrt{D}y_1)^n}{2\sqrt{D}}yn​=2D​(x1​+D​y1​)n−(x1​−D​y1​)n​
该式子可以表示为(xnyn)=(x1Dy1y1x1)n−1(x1y1)\begin{pmatrix} x_n \\ y_n\end{pmatrix}=\begin{pmatrix} x_1 & Dy_1\\ y_1 & x_1\end{pmatrix}^{n-1}\begin{pmatrix} x_1 \\ y_1\end{pmatrix}(xn​yn​​)=(x1​y1​​Dy1​x1​​)n−1(x1​y1​​)的矩阵形式,因此可以利用矩阵快速幂求出第nnn大的解。
证明略,见佩尔方程维基百科

求最小解

在DDD不为平方数的情况下,如何解出(x1,y1)(x_1,y_1)(x1​,y1​)成为了解决问题最关键的地方。
当然,在DDD不大的情况下,我们显然可以暴力求解。

暴力写法

void pell(int &a,int &b,int d)//暴力寻找pell方程最小解
{b=1;while(true){a=(LL)sqrt(d*b*b+1);if(a*a-d*b*b==1)break;b++;}
}

显然在很多时候,这种方法太慢了,而且对于某些问题上,x1x_1x1​,y1y_1y1​可能很大,为此,我们引入连分数。

连分数写法

连分数的相关性质与定理参考可以看这里
对于连分数a0+1a1+1a2+...=pqa_0+\frac{1}{a_1+\frac{1}{a_2+...}}=\frac{p}{q}a0​+a1​+a2​+...1​1​=qp​,我们将其记作[a0;a1,a2,...]=pq[a_0;a_1,a_2,...]=\frac{p}{q}[a0​;a1​,a2​,...]=qp​
我们记算sqrt(D)sqrt(D)sqrt(D)的渐进连分式hk\frac{h}{k}kh​,并将h2−Dk2h^2-Dk^2h2−Dk2代入验证,直到h2−Dk2=1h^2-Dk^2=1h2−Dk2=1
例如,我们计算x2−7x2=1x^2-7x^2=1x2−7x2=1
(7)=2.64575=2+0.64575,10.64575=1.54858\sqrt(7)=2.64575=2+0.64575,\frac{1}{0.64575}=1.54858(​7)=2.64575=2+0.64575,0.645751​=1.54858,取整数部分2,得到21\frac{2}{1}12​,代入发现不是解
1.54858=1+0.54858,10.54858=1.822881.54858=1+0.54858,\frac{1}{0.54858}=1.822881.54858=1+0.54858,0.548581​=1.82288,取整数1,得到2+11=312+\frac{1}{1}=\frac{3}{1}2+11​=13​,代入发现不是解
1.82288=1+0.82288,10.82288=1.215241.82288=1+0.82288,\frac{1}{0.82288}=1.215241.82288=1+0.82288,0.822881​=1.21524,取整数1,得到2+11+11=522+\frac{1}{1+\frac{1}{1}}=\frac{5}{2}2+1+11​1​=25​,代入发现不是解
1.21524=1+0.21524,10.21524=4.645971.21524=1+0.21524,\frac{1}{0.21524}=4.645971.21524=1+0.21524,0.215241​=4.64597,取整数1,得到2+11+11+11=832+\frac{1}{1+\frac{1}{1+\frac{1}{1}}}=\frac{8}{3}2+1+1+11​1​1​=38​,代入发现是解。
故最小正整数解为(8,3)(8,3)(8,3)
(代码待补充,咕咕咕)

例题

我们定义三条边是连续正整数t−1,t,t+1t-1,t,t+1t−1,t,t+1,且面积也是正整数的三角形为“G三角形”,
给定一个数nnn,求出t<=n(1≤n≤1e18)t<=n(1\leq n \leq 1e18)t<=n(1≤n≤1e18)的所有的满足条件的三角形个数

注意到xnx_nxn​是一阶线性递推式,呈指数级增长,因此只需要事前打表即可。代码略。

非标准型佩尔方程

对于方程x2−Dy2=k(D>0)x^2-Dy^2=k(D>0)x2−Dy2=k(D>0)
1.先找到第一组解(暴力或者连分数),记为(x0,y0)(x_0,y_0)(x0​,y0​)
2.定义标准型佩尔方程r2−Ds2=1r^2-Ds^2=1r2−Ds2=1
3.利用婆罗摩笈多恒等式得到
k=k∗1=(x02−Dy02)(r2−Ds2)=(x0r+Dy0s)2−D(x0s+y0r)2k=k*1=(x_{0}^{2}-Dy_0^2)(r^2-Ds^2)=(x_0r+Dy_0s)^2-D(x_0s+y_0r)^2k=k∗1=(x02​−Dy02​)(r2−Ds2)=(x0​r+Dy0​s)2−D(x0​s+y0​r)2
即x=x0r+Dy0s,y=x0s+y0rx=x_0r+Dy_0s,y=x_0s+y_0rx=x0​r+Dy0​s,y=x0​s+y0​r
而r,sr,sr,s可以利用标准型求解,从而得到x,yx,yx,y的解。

额外证明

事实上,(x02−Dy02)(r2−Ds2)=(x0r±Dy0s)2−D(x0s±y0r)2(x_{0}^{2}-Dy_0^2)(r^2-Ds^2)=(x_0r\pm Dy_0s)^2-D(x_0s\pm y_0r)^2(x02​−Dy02​)(r2−Ds2)=(x0​r±Dy0​s)2−D(x0​s±y0​r)2,证明略。
为什么只选择了加号?接下来讨论x0r−Dy0sx_0r-Dy_0sx0​r−Dy0​s的符号的不确定性
对于f(s)=x0r−Dy0s=x01+Ds2−Dy0sf(s)=x_0r-Dy_0s=x_0\sqrt{1+Ds^2}-Dy_0sf(s)=x0​r−Dy0​s=x0​1+Ds2​−Dy0​s
f′(s)=122x0Ds1+Ds2−Dy0f'(s)=\frac{1}{2}\frac{2x_0Ds}{\sqrt{1+Ds^2}}-Dy_0f′(s)=21​1+Ds2​2x0​Ds​−Dy0​
=x0Ds1+Ds2−Dy0≤x0−Dy0=\frac{x_0Ds}{\sqrt{1+Ds^2}}-Dy_0\leq x_0-Dy_0=1+Ds2​x0​Ds​−Dy0​≤x0​−Dy0​
因为x0−Dy0x_0-Dy_0x0​−Dy0​与x2−Dy2x^2-Dy^2x2−Dy2,也就是kkk的符号相同,讨论符号后,计算f(s)>0f(s)>0f(s)>0的区间,这部分也是解!
部分题目中为了方便,通常让k<0k<0k<0,且f′(s)<0f'(s)<0f′(s)<0或最小的正整数解(r0,s0)(r_0,s_0)(r0​,s0​)代入f(s)f(s)f(s)也是负数,即该部分无解!
x0s±y0rx_0s\pm y_0rx0​s±y0​r略,证明同理。

求解没有xy项的二元二次丢番图方程

对于没有xy项的二元二次丢番图方程Ax2+Bx+Cy2+Dy+E=0Ax^2+Bx+Cy^2+Dy+E=0Ax2+Bx+Cy2+Dy+E=0
我们配方后得到类似如下的式子x2+Dy2=Ex^2+Dy^2=Ex2+Dy2=E
之后再用推广佩尔方程求解即可。
这里贴一个我以前遇到过的题目。

例题

对于正整数m,nm,nm,n,满足2m(m+1)=n(n+1)2m(m+1)=n(n+1)2m(m+1)=n(n+1),求不大于l(1≤l≤1e18)l(1\leq l \leq 1e18)l(1≤l≤1e18)的最大的nnn。

得到nnn的递推式之后,不难发现二阶线性递推式的增长呈指数爆炸,因此只需要快速打表出前若干个即可。代码略。

后记

佩尔方程是个冷门,但一旦考察时很灵活的类型,希望各位读者可以掌握。
对于部分包含xyxyxy项的二元二次丢番图方程,可以先用一些特殊方法配方为不包含改项的式子,具体以后有精力再来展开讨论。
DrGilbert 2021.4.19
upd:2021.7.7:修复部分描述问题

佩尔方程及其在一类二元二次丢番图方程的推广相关推荐

  1. 数论笔记 · 佩尔方程

    转载自:http://blog.sina.com.cn/s/blog_5d06e2390100ll92.html 佩尔方程实际上并不是佩尔提出的,而是费尔马提出,却被欧拉误记为佩尔提出,因此佩尔方程的 ...

  2. 数论笔记 · 佩尔方程(连分数)

    http://blog.sina.com.cn/s/blog_5d06e2390100ll92.html 佩尔方程实际上并不是佩尔提出的,而是费尔马提出,却被欧拉误记为佩尔提出,因此佩尔方程的名称沿用 ...

  3. C语言之基本算法26—佩尔方程求解

    //穷举法! /* ====================================================== 题目:求佩尔方程x*x-73*y*y=1的解. =========== ...

  4. 求解佩尔方程的基本解

    佩尔方程是关于x,y的二元不定式方程,表述为:x*x-n*y*y=1;(n为非平方整数) 当x=1或x=-1,y=0显然满足方程.常把x,y为满足方程的最小正数的解又称基本解. #include< ...

  5. 【枚举算法】佩尔方程

    佩尔方程是关于x.y的二次不定方程,表述为: x^2 - ny^2 = 1  (n为非平方正整数) 当x = 1或-1,y = 0时,满足方程.常把x.y中有一个零的解称为平凡解. 佩尔方程的非平凡解 ...

  6. POJ 1320 Street Numbers 解佩尔方程

    传送门 Street Numbers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2529   Accepted: 140 ...

  7. c语言求佩尔方程的解设计思路,c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)...

    佩尔方程讲解连接: 若一个丢番图方程具有以下的形式: 且 为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung) 若 是完全平方数,则这个方 ...

  8. 数论 —— 佩尔方程与连分数

    [概述] 连分数是一种特殊的繁分数,其形式为:  ,通常记为:,其中  和  称为连分数多项式,对于任意的 a 均为一次式,它们的比值称为第 n 个渐进值渐进分数. 佩尔(Pell)方程是一种不定二次 ...

  9. 佩尔方程(超详细推导+例题讲解) 每日一遍,算法再见!

    这里写目录标题 佩尔方程 第一类佩尔方程 第一类佩尔方程例题讲解 第二类佩尔方程 佩尔方程 第一类佩尔方程 定义:形如x2−dy2=1x^2 - dy^2 = 1x2−dy2=1(d>1,且d不 ...

最新文章

  1. 假期怎么提升Python技能?100+编程题给你练~
  2. Linux下关闭和开启IPv6的方法
  3. 关系型数据库、非关系型数据库
  4. 验证中文的正则表达式
  5. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2.2 内存...
  6. undertow ssl_SSL与WildFly 8和Undertow
  7. java 子类继承父类_关于Java 的继承问题,子类会继承父类的哪些东西?-----转载...
  8. LeetCode : Number of Segments in a String
  9. 【Level 08】U06 Good Feeling L3 Fun-filled concert
  10. .net面试题及答案(一)(转)
  11. 活久见!巴菲特被诈骗50亿,股神真的糊涂了?
  12. 两个员工,一个做事认真但效率低,一个迟到早退但效率高,只能留一个我该留哪个?
  13. timequest静态时序分析学习笔记之命令约束
  14. linux下mysql允许远程连接
  15. VSTO之一:Word外接程序
  16. 再见 Wordpress!这个开源建站神器有点吊
  17. 恕我直言,Java四大名著并不一定适合你!
  18. 数据分析——1.环境搭建(Jupyter Lab安装教程)
  19. jieba中文分词组件
  20. CSS实现元素翻转效果

热门文章

  1. 微信小游戏制作学习笔记
  2. 异常:java.lang.ArithmeticException
  3. python中 round函数的使用
  4. kubernetes节点NotReady
  5. python: too many indices for array
  6. MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具
  7. 为你的博客引入——今日诗词、每日一言(js插件分享)
  8. 分层确定性钱包(HD Wallets)
  9. 数据仓库系列:初识数仓
  10. 济南86公里综合管廊,CBD近万地下车位已建成