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

佩尔方程讲解连接:

若一个丢番图方程具有以下的形式:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung)

0818b9ca8b590ca3270a3433284dd417.png是完全平方数,则这个方程式只有解

0818b9ca8b590ca3270a3433284dd417.png(实际上对任意的

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png都是解)。对于其余情况,拉格朗日证明了佩尔方程总有解。而这些解可由

0818b9ca8b590ca3270a3433284dd417.png的连分数求出。

0818b9ca8b590ca3270a3433284dd417.png 是

0818b9ca8b590ca3270a3433284dd417.png的连分数表示:

0818b9ca8b590ca3270a3433284dd417.png的渐近分数列,由连分数理论知存在 

0818b9ca8b590ca3270a3433284dd417.png 使得(pi,qi) 为佩尔方程的解。取其中最小的 

0818b9ca8b590ca3270a3433284dd417.png,将对应的 (pi,qi) 称为佩尔方程的基本解,或最小解,记作(x1,y1) ,则所有的解(xi,yi) 可表示成如下形式:

0818b9ca8b590ca3270a3433284dd417.png

或者由以下递推公式得到:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png  

——————————————————分割线————————————————————

求得佩尔方程最小正整数解后,由公式

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png可求得第k解(X1,Y1为最小正整数解)。

到这里你可能会想用递归的方法求解Xk及Yk。可是事实上如果k的值很大的话,就会花费好多时间。所以在这里求解的时候,用矩阵快速幂便可节约很多时间。

现在构造矩阵,如下图

0818b9ca8b590ca3270a3433284dd417.png

swun oj 里的一题,请参考,以便理解

#include

#include

#include

using namespace std;

typedef __int64 ll;

#define Mod 1000000007

ll x,y,n,k;

struct PellAns

{

ll p,q;

};

struct Node

{

ll g,h;

};

struct Matrix

{

ll a[2][2];

void init()

{

a[0][0]=x%Mod;a[0][1]=y%Mod;

a[1][0]=(n%Mod*y%Mod%Mod)%Mod;a[1][1]=x%Mod;

}

};

//矩阵乘法

Matrix matrix_mul(Matrix a,Matrix b)

{

ll i,j,k;

Matrix ans;

for(i=0;i<2;i++)

{

for(j=0;j<2;j++)

{

ans.a[i][j]=0;

for(k=0;k<2;k++)

ans.a[i][j]=(ans.a[i][j]%Mod+(a.a[i][k]%Mod*b.a[k][j]%Mod)%Mod)%Mod;

}

}

return ans;

}

//矩阵快速幂

Matrix mult(Matrix a,ll b)

{

Matrix ans;

ans.a[0][0]=1;ans.a[0][1]=0;

ans.a[1][0]=0;ans.a[1][1]=1;

while(b)

{

if(b & 1)

ans=matrix_mul(ans,a);

b>>=1;

//cout<

a=matrix_mul(a,a);

}

return ans;

}

//求佩尔方程最小正整数解...模板

PellAns Solve( ll n1)

{

PellAns s[4];

Node w[4];

int a[4];

s[0].p=0; s[0].q=1;

s[1].p=1; s[1].q=0;

a[0]=(ll)floor(sqrt( (double)n ));

a[2]=a[0];

w[1].g=0;w[1].h=1;

while( 1 )

{

w[2].g = -w[1].g+a[2]*w[1].h;

w[2].h = (n1-w[2].g*w[2].g)/w[1].h;

a[3] = (ll)floor( (double)(w[2].g+a[0])/w[2].h );

s[2].p = a[2]*s[1].p+s[0].p;

s[2].q = a[2]*s[1].q+s[0].q;

if( (s[2].p*s[2].p-n1*s[2].q*s[2].q) == 1 &&s[2].p>0&&s[2].q>0 )

return s[2];

w[0]=w[1];w[1]=w[2];

a[2]=a[3];

s[0]=s[1];s[1]=s[2];

}

}

int main()

{

PellAns ans;

// freopen("a.in","r",stdin);

//freopen("1.out","w",stdout);

while( ~scanf("%I64d%I64d",&n,&k) )

{

if(sqrt(double(n))*sqrt(double(n))==n) {

printf("No solution\n");continue;

}

ans = Solve(n);//求得佩尔方程最小正整数解

x=ans.p%Mod,y=ans.q%Mod;

Matrix tmp,ans1;

tmp.init(); //初始化

ans1=mult(tmp,(k-1)%Mod);

ll x1=x%Mod;

x=((ans1.a[0][0]%Mod*x%Mod)%Mod+(ans1.a[1][0]%Mod*y%Mod)%Mod)%Mod;

y=((ans1.a[0][1]%Mod*x1%Mod)+(ans1.a[1][1]%Mod*y%Mod)%Mod)%Mod;

printf("%I64d,%I64d %I64d,%I64d\n",ans.p,ans.q,x%Mod,y%Mod);

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 9.0 https 适配,如何适配 Android 9.0? 在 Android 9.0 上发生 SSL handshake timed out 异常怎么解决...

Android 9.0 开始&#xff0c;默认不允许明文传输&#xff0c;所以在建立网络连接时会使用 https 连接&#xff0c;同时进行安全认证。如果应用没有做对应处理&#xff0c;即会发生上述异常。解决方法有两种&#xff1a;一. 在应用里声明允许明文传输.1. 在应用的 res/xml 文件…

java 7.函数-递归_带有谓词的Java中的函数样式-第1部分

java 7.函数-递归您一直在听到将要席卷全球的函数式编程&#xff0c;而您仍然坚持使用普通Java&#xff1f; 不用担心&#xff0c;因为您已经可以在日常Java中添加一些功能样式。 此外&#xff0c;它很有趣&#xff0c;可以节省许多代码行并减少错误。 什么是谓词&#xff1f; …

大话oraclerac集群、高可用性、备份与恢复_数腾Oracle RAC数据库灾备解决方案

“一个系统包含很多模块&#xff0c;数据库、前端、缓存、搜索、消息队列等&#xff0c;每个模块都需要做到高可用&#xff0c;才能保证整个系统的高可用。”数据库作为现代信息社会的基石&#xff0c;几乎所有的计算机应用软件都构建于数据库系统之上&#xff0c;对于数据库而…

Android面试题Service,Android面试题-IntentService源码分析

自定义控件联网工具数据库源码分析相关面试题Activity相关面试题Service相关面试题与XMPP相关面试题与性能优化相关面试题与登录相关面试题与开发相关面试题与人事相关面试题人事面试宝典IntentService是继承于Service并处理异步请求的一个类&#xff0c;在IntentService内有一…

OpenGL中的Shader

http://blog.csdn.net/huangcanjun187/article/details/52474365 学习总结自&#xff1a;http://learnopengl.com/#!Getting-started/Hello-Triangle http://learnopengl.com/#!Getting-started/Shaders 继上篇文章中提到&#xff0c;OpenGL是为了在GPU上同时跑成千上万个程序&…

在html中金色怎么写,ps金色数值是多少?

一些常用的金色表示值&#xff1a;R255&#xff0c;G215&#xff0c;B0R205&#xff0c;G127&#xff0c;B50R166&#xff0c;G124&#xff0c;B64R217&#xff0c;G217&#xff0c;B25关于金色rgb值&#xff0c;金色就是黄色&#xff0c;但是我们看到的一些金色效果只是用颜色…

EAP 7 Alpha和Java EE 7入门

红帽JBoss企业应用程序平台7&#xff08;JBoss EAP 7&#xff09;是基于开放标准构建并符合Java Enterprise Edition 7规范的中间件平台。 它基于WildFly等经过验证的创新开源技术之上&#xff0c;它将使Java EE 7的开发变得更加容易。 这是有关如何开始使用最新ALPHA版本的快速…

简单点赞效果html,js实现点赞效果

javascript实现点赞或踩加一&#xff0c;再点一次减一的效果好多新手在网上找不到点赞效果的代码&#xff0c;今天给大家分享一个采用js写的简单方法(有点错误&#xff0c;已修正)效果图如下HTML代码可直接ctrl c复制代码3030CSS代码可直接ctrl c复制代码(注&#xff1a;样式…

html显示和隐藏不占空间的是什么,css怎么设置不占用空间的隐藏?

css怎么设置不占用空间的隐藏&#xff1f;下面本篇文章就来给大家介绍一下使用CSS设置不占用空间隐藏的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。在CSS中&#xff0c;可以利用display属性&#xff0c;设置display:none来设…

javame_JavaME:Google静态地图API

javame无论您是需要基于位置的应用程序的地图还是只是出于娱乐目的&#xff0c;都可以使用有史以来最简单的方法&#xff1a;Google Static Maps API。 在这篇文章中&#xff0c;我们将看到如何从纬度和经度获得地图作为图像。 可以使用Location API获得纬度和经度&#xff0c;…

js如何获取html图片,JS/JQuery获取网页或文章或某DIV所有图片

要获取网页所有图片&#xff0c;我们可以通过Javascript就能轻松实现&#xff0c;不过要想获得文章或某容器(如&#xff1a;Div)里所有图片&#xff0c;使用JQuery而不是Javascript来实现就会变得更加简单。本文将给你详细介绍。通过Javascript获取网页所有图片html代码JS/JQue…

带有Netflix Ribbon的Spring Cloud Rest Client-基础知识

在较早的博客文章中&#xff0c;我介绍了Spring Cloud世界中REST客户端的各种选项。 所有选项围绕着基于Netflix OSS的名为Ribbon的组件&#xff0c;该组件处理与承载服务的不同实例之间的调用负载平衡&#xff0c;处理故障转移&#xff0c;超时等有关的方面。在此&#xff0c;…

html中给文章怎么设置行高,css如何设置行距?

在网页的布局中几大段文字挤在一起总归是不好看的&#xff0c;这时候我们就需要来设置行间距来让文字看起来不拥挤&#xff0c;也让整个页面看起来美观整洁&#xff0c;那么&#xff0c;行间距该如何设置呢&#xff1f;本篇文章就来给大家介绍一下css行间距的设置方法。首先我们…

初中数学知识点总结_初中物理 | 最全知识点总结

往期回顾初中物理 | 知识点总结一&#xff1a;机械运动初中物理 | 知识点总结二&#xff1a;声现象初中物理 | 知识点总结三&#xff1a;物态变化初中物理 | 知识点总结四&#xff1a;光现象初中物理 | 知识点总结五&#xff1a;透镜及其应用初中物理 | 知识点总结六&#xff1…

redis版本_全球首发|阿里云正式推出云数据库Redis6.0版本

Redis 6.0更多精彩详情2020年6月23日&#xff0c;阿里云正式推出云数据库Redis 6.0版本。Redis 6.0版本为Redis开源社区于5月2日发布的全新版本&#xff0c;包含多项重大功能更新和大幅度的性能提升。依托于阿里云强大的云服务与管控能力&#xff0c;以及团队的快速跟进&#x…

webclient无法获取html文件,C# WebClient获取网页源码的方法

效果如图完整代码如下using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;//引入以下命名空间using System.Net;using System.IO;using System.Threading;name…

基于javafx的五子棋_基于JavaFX的SimpleDateFormat演示程序

基于javafx的五子棋对于使用Java Date进行格式化的新手&#xff0c;甚至对于使用Java Date进行格式化的新手&#xff0c;对于有经验的Java开发人员来说&#xff0c;可能都会有些棘手&#xff0c;其中之一就是使用SimpleDateFormat指定日期/时间格式。 SimpleDateFormat的基于类…

监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”

引言机器学习&#xff0c;绕不开预测问题&#xff0c;预测绕不开回归和分类。本篇介绍最常用的二分类算法&#xff1a;逻辑回归(Logistics Regression)&#xff0c;当然随着算法的发展&#xff0c;它也可用于多分类问题。每一个算法都是许许多多数学家的努力铸就&#xff0c;理…

html网页制作图案,巧用CSS滤镜做图案文字-网页设计,HTML/CSS

请先看看以下演示中的图案文字。这可不是图片效果&#xff0c;而是用css滤镜中的chroma() 语句做成的文本文字&#xff0c;其中文本的内容和图案都可以自由设定。先介绍一下这个神奇的滤镜&#xff1a;chroma() 滤镜。语法&#xff1a; filter:chroma( color#cccccc) &#xff…

JavaOne 2015 –又一年,又向前迈进了一步

JavaOne 2015旧金山于10月25日至29日举行。 我很自豪地说这是我第九个人参加JavaOne&#xff0c;第七个人是演讲者&#xff0c;第四个人是Oracle员工&#xff0c;第三个人是内容委员会的成员&#xff0c;第二个人是项目负责人。 我认为对于JavaOne来说&#xff0c;这是又一个美…