形如x^2-dy^2=1,且d不为完全平方数的不定方程为佩尔方程。如果d是完全平方数无解。
解佩尔方程
一般需要两步,用暴力法求出特解,在用矩阵迭代公式求出所有正整数解。
暴力法求特解代码
int x,y;
void search()
{
y=1;
while(1)
{
x=(long long)sqrt(d*y*y+1);
if(x*x-d*y*y==1)
break;
y++;
}
}
然后用矩阵迭代公式求出所有正整数解
#define maxn 4
struct matrix
{
int m[maxn][maxn];
} Matrix;
Matrix per,d;
void init()
{
d.m[0][0]=x;
d.m[1][0]=y;
d.m[0][1]=D*y;
d.m[1][1]=x;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
per.m[i][j]=(i==j);
}
Matrix multi(Matrix a,Matrix b)
{
Matrix c;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
c.m[i][j]=0;
for(int k=0; k<n; k++)
{
c.m[i][j]+=a.m[i][k]*b.m[k][j];
}
}
return c;
}
Matrix power(int k)
{
Matrix p=d,ans=per;
while(k)
{
if(k&1)
{
ans=multi(ans,p);
k--;
}
k/=2;
p=multi(p,p);
}
return ans;
}
d=power(K-1);
根据题目要求的解给出相应的答案。