解佩尔方程

1.若已知方程x^2-dy ^2=1的最小特解(最小正整数解)x1,y1,那么有迭代公式:
xn=xn-1
x1+dyn-1y1
yn=xn-1y1+yn-1x1
求出所有的解(xk,yk),可以用矩阵表示如下:
|xk|=|x1 dy1| ^(k-1) |x1|
|yk| |y1 x1| |y1|
2.求特解
(1)暴力法
x^2=d
y ^2+1,
所以,x=sqrt(dy^2+1)
通过对y进行枚举,求出x,然后判断是否有 x^2==d
y ^2+1,即可。
(2)连分数法
详解

题目:
poj 1305
这个题目的特解可以直接求出,然后只要记住递推公式即可。

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
int main()
{
    int x1=3;
    int y1=1;
    ll x2=x1;
    ll y2=y1;
    int cnt=0;
    while(cnt<10)
    {//printf("cnt=%d   ",cnt);
        ll n=y2;
        ll m=(x2-1)/2;//printf("x2=%lld y2=%lld\n",x2,y2);
        if(n<m)
        {
            cnt++;
            printf("%10lld%10lld\n",n,m);
        }
        int tx=x2,ty=y2;
        x2=tx*3+8*ty;
        y2=tx+ty*3;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值