连分数求解Pell方程
如果我们求出Pell方程的最小正整数解后,就可以根据递推式求出所有的解。
则根据上式我们可以构造矩阵,然后就可以快速幂了。
这样就可以求出第k大的解。
HDU3292题就要用到上面的矩阵方法求第k大的解。
拓展一点:
(1)如果第n个三角数t等于m的平方,即,那么x=2n+1,y=m,就是丢番图方程的解。
(2)求丢番图方程的最小正整数解,其中d为非完全平方数的正整数。
题目:http://poj.org/problem?id=2427
题意:求方程x^2-N*y^2=1的最小正整数解。本题要用到高精度,所以用Java。
import java.math.BigInteger;
import java.util.Scanner;
public class Main
{
public static void solve(int n)
{
BigInteger N, p1, p2, q1, q2, a0, a1, a2, g1, g2, h1, h2,p,q;
g1 = q2 = p1 = BigInteger.ZERO;
h1 = q1 = p2 = BigInteger.ONE;
a0 = a1 = BigInteger.valueOf((int)Math.sqrt(1.0*n));
BigInteger ans=a0.multiply(a0);
if(ans.equals(BigInteger.valueOf(n)))
{
System.out.println("No solution!");
return;
}
N = BigInteger.valueOf(n);
while (true)
{
g2 = a1.multiply(h1).subtract(g1);
h2 = N.subtract(g2.pow(2)).divide(h1);
a2 = g2.add(a0).divide(h2);
p = a1.multiply(p2).add(p1);
q = a1.multiply(q2).add(q1);
if (p.pow(2).subtract(N.multiply(q.pow(2))).compareTo(BigInteger.ONE) == 0) break;
g1 = g2;h1 = h2;a1 = a2;
p1 = p2;p2 = p;
q1 = q2;q2 = q;
}
System.out.println(p+" "+q);
}
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
while(cin.hasNextInt())
{
solve(cin.nextInt());
}
}
}
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2281
题意:给出一个数N,求1到N的范围内,找到一个最大的n,满足,N最大达到10^18
分析:我们把上式写成,然后就是解Pell方程即可。
连分数求解Pell方程相关推荐
- Pell方程初识以及技巧性的求解Pell方程整数解(附带手推详细证明)
什么是Pell方程 形如: x2−Ny2=1(n∈Z,n≠0)x^2-Ny^2=1(n\in \mathbb{Z},n\not= 0) x2−Ny2=1(n∈Z,n=0) 且N为奇非平方数 可以 ...
- 关于Pell方程及其求解技巧
Pell方程在不定方程里经常出现,解其他方程的时候最后往往归结为对某个pell方程的讨论.本文不加证明的叙述几个pell方程的结论,并讨论怎么用连分数来具体算出特定pell方程的解. Pell方程,一 ...
- 【pell方程学习】
转自该博客 POJ-1320 Street Numbers pell方程 题目链接:http://poj.org/problem?id=1320 此题可以打表水过,但这里涉及的一个知识点,那就是pel ...
- [学习笔记] Pell方程
感谢这两位巨佬,部分思路和图片来源于他们的启发: IBN5100 The-Pines-of-Star 是什么? Pell\text{Pell}Pell方程主要用来解决下面形式的方程: x2−dy2=1 ...
- 数论概论读书笔记 41.连分数与佩尔方程
连分数与佩尔方程 通过反复地将小数部分翻到分母上并将整数部分分离,我们可以对任何一个数形成连分数: 连分数在视觉上滑向右下方,将它们写成分数却要花费很多的笔墨和空间,由于所有的分子都是1,故我们要做的 ...
- 连分数与佩尔方程特解(最小整数解)
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[20000]; bool pell_mini ...
- OpenGL 使用FDTD求解电磁波方程
OpenGL使用FDTD求解电磁波方程 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <GLXW/glxw.h> #include ...
- matlab雷诺曲线,多重网格法求解雷诺方程的MATLAB编程 - 程序语言 - 小木虫 - 学术 科研 互动社区...
这是MATLAB有限差分法求解雷诺方程,可以参考下.希望对你有用 function [Fx,Fy]=FDM_circular(X,Y,X_dot,Y_dot) Fx=0; Fy=0; epsilon= ...
- Q144:FS,求解流体方程(逻辑总结)
看完了<Fluid Simulation for Computer Graphics>的第一部分(基础部分). 真的只能算是"看完",着实搞不懂其中的数学原理and物理 ...
最新文章
- 联想笔记本不能无线上网
- c++ 冒泡排序_学习笔记-详解冒泡排序
- CentOS7 安装NFS SSH免密码登陆
- 云计算设计模式(三)——补偿交易模式
- 腾讯x5加载本地html乱码,腾讯X5内核播放器遇到的问题
- postfix过滤器名称不一致导致postfix/qmg:warning: connect to transport xxxx: No such file or directory...
- python之禅中文原文_Python之禅 - osc_ns45oss7的个人空间 - OSCHINA - 中文开源技术交流社区...
- Docker快速安装Sybase数据库DBeaver数据库图形化管理开发工具
- 【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量
- webtop搭建简单知识库粗略介绍
- b+树的增删改查_EF Core / 基础_从建库到增删改查
- 利用 Commons-Fileupload 实现文件上传分析(转)
- java面试题汇总(1)
- Rocketmq技术分享
- 【南卡樱桃|读书笔记《学习高手》】
- SQL Server 2008 修改安装路径
- matlab生成的图片有边,科学网—图片空白边缘处理/统计直方图---matlab/保存生成高质量的清晰图 - 杨小林的博文...
- python实现Flesch Reading Ease Readability Formula——Flesch阅读易读性公式
- H5纯页面方式手机端实现“扫一扫”功能(不是直接调起摄像头)
- 极域电子教室学生端全屏广播的破解及编程处理(附静态库)