title : 佩尔方程
date : 2021-10-31
tags : ACM,数学
author : Linno

佩尔方程

形如x2−dy2=1(d>1且d不为完全平方数)x^2-dy^2=1(d>1且d不为完全平方数)x2−dy2=1(d>1且d不为完全平方数)的不定方程称为佩尔方程
设两个解为(x1,y1)和(x2,y2),那么有{x12−dy12=1x22−dy22=1得到(x12−dy12)(x22−dy22)=1展开得到x12x22−dx12y22−dy12x22+d2y12y22=1⇒(x12x22+d2y12y22)−d(dx12y22+y12x22)=1⇒(x12x22+d2y12y22+2dx1x2y1y2)−d(dx12y22+y12x22−2dx1x2y1y2)=1⇒(x1x2+dy1y2)−d(dx12y22+y12x22−2dx1x2y1y2)=1所以x3=x2x1+dy2y1,y3=x2y1+x1y2根据迭代公式,通解为:xn=xn−1x1+dyn−1y1,yn=xn−1y1+yn−1x1设两个解为(x_1,y_1)和(x_2,y_2),那么有\\ \begin{cases} x_1^2-dy_1^2=1\\ x_2^2-dy_2^2=1\\ \end{cases} 得到(x_1^2-dy_1^2)(x_2^2-dy_2^2)=1\\ 展开得到x_1^2x_2^2-dx_1^2y_2^2-dy_1^2x_2^2+d^2y_1^2y_2^2=1\\ \Rightarrow (x_1^2x_2^2+d^2y_1^2y_2^2)-d(dx_1^2y_2^2+y_1^2x_2^2)=1\\ \Rightarrow (x_1^2x_2^2+d^2y_1^2y_2^2+2dx_1x_2y_1y_2)-d(dx_1^2y_2^2+y_1^2x_2^2-2dx_1x_2y_1y_2)=1\\ \Rightarrow (x_1x_2+dy_1y_2)-d(dx_1^2y_2^2+y_1^2x_2^2-2dx_1x_2y_1y_2)=1\\ 所以x_3=x_2x_1+dy_2y_1,y_3=x_2y_1+x_1y_2\\ 根据迭代公式,通解为:\\ x_n=x_{n-1}x_1+dy_{n-1}y_1,y_n=x_{n-1}y_1+y_{n-1}x_1\\ 设两个解为(x1​,y1​)和(x2​,y2​),那么有{x12​−dy12​=1x22​−dy22​=1​得到(x12​−dy12​)(x22​−dy22​)=1展开得到x12​x22​−dx12​y22​−dy12​x22​+d2y12​y22​=1⇒(x12​x22​+d2y12​y22​)−d(dx12​y22​+y12​x22​)=1⇒(x12​x22​+d2y12​y22​+2dx1​x2​y1​y2​)−d(dx12​y22​+y12​x22​−2dx1​x2​y1​y2​)=1⇒(x1​x2​+dy1​y2​)−d(dx12​y22​+y12​x22​−2dx1​x2​y1​y2​)=1所以x3​=x2​x1​+dy2​y1​,y3​=x2​y1​+x1​y2​根据迭代公式,通解为:xn​=xn−1​x1​+dyn−1​y1​,yn​=xn−1​y1​+yn−1​x1​

矩阵快速幂迭代法

[xnyn]=[x1dy1y1x1]n−1[x1y1]\begin{bmatrix}x_n\\y_n\end{bmatrix}=\begin{bmatrix}x_1&dy_1\\y_1&x_1\end{bmatrix}^{n-1}\begin{bmatrix}x_1\\y_1\end{bmatrix} [xn​yn​​]=[x1​y1​​dy1​x1​​]n−1[x1​y1​​]

这样我们就可以用矩阵快速幂来求取方程的第n个解,时间复杂度为O(logn)。

HDU3292 No more tricks, Mr Nanguo
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod=8191;
const ll Maxn=10;
/*矩阵乘法*/
void Matrix_ksm(ll a[][Maxn],ll b[][Maxn],ll size)
{ll temp[Maxn][Maxn]={0};//注意一定要初始化为0 for(ll i=1;i<=size;i++)for(ll j=1;j<=size;j++)for(ll k=1;k<=size;k++){/*在矩阵运算的时候,我们把每一个可能超范围的地方都取模*/temp[i][j]=(temp[i][j]%mod+a[i][k]%mod*b[k][j]%mod)%mod;}for(ll i=1;i<=size;i++)for(ll j=1;j<=size;j++)a[i][j]=temp[i][j];   return;
}
void solve(ll &x,ll &y,ll d){ll tempc,tempf; for(y=1;;y++){tempc = ceil(sqrt(d*y*y+1));tempf = floor(sqrt(d*y*y+1));if(tempc==tempf) break;}x=tempc;return ;
}
int main(){ll x1,y1;ll n,d;while(scanf("%lld %lld",&d,&n)!=EOF){if(d<=1||ceil(sqrt(d))==floor(sqrt(d))){cout<<"No answers can meet such conditions"<<'\n';continue;} solve(x1,y1,d);//我们先求第一个解,也就是最小正整数解 ll ans[Maxn][Maxn]={0};for(ll i=1;i<=Maxn;i++) ans[i][i]=1;ll dishu[Maxn][Maxn];dishu[1][1]=x1;dishu[1][2]=d*y1;dishu[2][1]=y1;dishu[2][2]=x1;ll zhishu=n-1;/*矩阵快速幂*/ while(zhishu){if(zhishu&1){zhishu--;Matrix_ksm(ans,dishu,2);}else{zhishu>>=1;Matrix_ksm(dishu,dishu,2);}}ll xn = ans[1][1]%mod*x1%mod+ans[1][2]%mod*y1%mod;ll yn = ans[2][1]%mod*x1%mod+ans[2][2]%mod*y1%mod;cout<<xn%mod<<'\n';}return 0;
}

第二类佩尔方程

形如x2−dy2=k的方程叫做第二类佩尔方程形如x^2-dy^2=k的方程叫做第二类佩尔方程形如x2−dy2=k的方程叫做第二类佩尔方程
推导:假设x2−dy2=k①的一个特解为p,q,设x2−dy2=1②整数解为x1,y1①×②得:(p2−dq2)∗(x12−dy12)=k所以通解为x=px1±dqy1,y=py1±qx1推导:\\ 假设x^2-dy^2=k①的一个特解为p,q,设x^2-dy^2=1②整数解为x_1,y_1\\ ①×②得:(p^2-dq^2)*(x_1^2-dy_1^2)=k\\ 所以通解为x=px_1\pm dqy_1,y=py_1\pm qx_1\\ 推导:假设x2−dy2=k①的一个特解为p,q,设x2−dy2=1②整数解为x1​,y1​①×②得:(p2−dq2)∗(x12​−dy12​)=k所以通解为x=px1​±dqy1​,y=py1​±qx1​

矩阵形式为:[xnyn]=[pdqqp]n−1[x1y1]矩阵形式为:\\\begin{bmatrix}x_n\\y_n\end{bmatrix}=\begin{bmatrix}p&dq\\q&p\end{bmatrix}^{n-1}\begin{bmatrix}x_1\\y_1\end{bmatrix} 矩阵形式为:[xn​yn​​]=[pq​dqp​]n−1[x1​y1​​]

参考资料:

https://blog.csdn.net/TheWayForDream/article/details/113772229

【算法竞赛学习笔记】佩尔方程-数学提升计划相关推荐

  1. 【算法竞赛学习笔记】pb_ds-超好懂的数据结构

    title : pb_ds date : 2021-8-21 tags : ACM,数据结构 author : Linno 简介 pb_ds库全称Policy-Based Data Structure ...

  2. 【算法竞赛学习笔记】快速傅里叶变换FFT-数学提高计划

    tilte : 快速傅里叶变换FFT学习笔记 tags : ACM,数论 date : 2021-7-18 简介 FFT(Fast Fourier Transformation),中文名快速傅里叶变换 ...

  3. 【算法竞赛学习笔记】离散对数与BSGS-数学提升计划

    title : 离散对数与BSGS date : 2021-8-12 tags : ACM,数论 author Linno 阶 对与m互质的整数a,我们记满足an≡1modma^n\equiv 1\m ...

  4. 【算法竞赛学习笔记】KD-Tree

    title : KD-Tree date : 2022-4-7 tags : ACM,数据结构 author : Linno K-D tree K-D树是在k维欧几里得空间中组织点的数据结构.在算法竞 ...

  5. 【算法竞赛学习笔记】莫队算法-超优雅的暴力算法

    title : 莫队算法 tags : ACM,暴力 date : 2021-10-30 author : Linno 普通莫队 常用操作:分块/排序/卡常/离散化等,直接上板子. luoguP270 ...

  6. 【算法竞赛学习笔记】状压DP

    title : 状压DP date : 2022-3-5 tags : ACM,图论,动态规划 author : Linno 状压DP 状态压缩,是利用二进制数的性质对问题进行优化的一种算法,经常与搜 ...

  7. 【算法竞赛学习笔记】Link-Cut-Tree基础-超好懂的数据结构

    titile : Link-Cut-Tree time : 2021-7-21 tags : ACM,数据结构 author : Linno LCT Link-Cut-Tree,中文名为动态树,是一种 ...

  8. 【算法竞赛学习笔记】超好懂的斯坦纳树详解!!!

    title : 斯坦纳树 tags : ACM 图论 date : 2021-6-26 author : Linno 什么是斯坦纳树 给定 n 个点 A1,A2,⋯,An试求连接此n个点,总长最短的直 ...

  9. 【算法竞赛学习笔记】后缀自动机SAM-超经典的字符串问题详解

    title : 后缀自动机 date : 2021-11-11 tags : ACM,字符串 author : Linno 前置知识 KMP,Trie,AC自动机等字符串基础 DFA(有限状态自动机) ...

最新文章

  1. Linux之文本处理
  2. 【杂谈】从学员到参与书籍写作,我在有三AI学习与成长的故事
  3. iOS 流媒体 基本使用 和方法注意
  4. C#信息采集系统,常见控件练习
  5. matlab出图时汉字都变成方框_linux下Matlab 2020中文字体方框问题解决方法
  6. java后台开发程序媛~~
  7. 基于android的电子词典设计_基于安卓Android电子词典移动客户端APP设计(AndroidStudio,SQLit...
  8. RDCMan安装使用说明
  9. 好用的飞书版固定资产管理系统
  10. 如何清除Hacktool.Rootkit病毒,如何让msdirectx.sys此文件彻底删除,谢谢!
  11. 什么软件能测试显卡功耗,如何在win10中检查计算机的显卡功耗
  12. 多重序列比对 CLUSTALX
  13. U盘插入电脑需要格式化,数据恢复
  14. TWaver三维可视化管理软件、3D和2D开发工具软件的试用(申请试用的回复邮件)
  15. 计算机网络中的猫,什么是猫(调制解调器),猫有什么作用-电脑自学网
  16. 推荐一下十三款内网穿透工具(超全)
  17. 计算机真题模拟运算表怎么做,教大家Excel工作表中使用模拟运算表的方法
  18. 谁说大厂都用 React,微信读书官网用 Vue
  19. 数组、链表、LinkedList源码分析、跳表
  20. openwrt编译smartdns_老大静态编译openwrt平台mipsel_24kc架构的smartdns时报错,求救!...

热门文章

  1. 触摸板失效,fn快捷键不显示,神舟control center3.0无法打开等问题重装驱动
  2. 网络篇 物理拓扑与逻辑拓扑-19
  3. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态
  4. 20亿美金独角兽Notion,和它在中国的“抄袭”者们
  5. 正则表达式中反斜杠的另一用法
  6. 集成智能小车(二...2)整体设计之谋
  7. ICML 2022|达摩院多模态模型OFA,实现模态、任务和架构三个统一
  8. 购物车(session版)
  9. 苹果,U盘越狱iPhone绕ID最新教程及各种坑解决,吐血之作(超详细超简单教程)-balenaEtcher-Checkm8-bootra1n
  10. 微信小程序 获取 手机验证码 短信验证码 后端功能实现解析