方程没有10亿以内的解,手动计算应该是行不通的
我写了一个程序,计算出方程的一组特解:
程序附在后面,C++写的,任何一个windows平台下的C++编译器都可以编译(VC++,DEVCPP等等),涉及到大整数的运算比较麻烦,用matlab写起来会更简单
程序清单:
#include stdio.h
#include stdlib.h
#include memory.h
#include math.h
{
INT a[LEN];//存放大整数的数组
/*实际是计算:
这是连分数的递推形式
*/
void go(INT n)
int i;
for(i = 0;i h[1].len;i++)
for(i = 0;i k[1].len;i++)
h[i] = h[i + 1],k[i] = k[i + 1];
}
void print(BIG a) //把大整数输出
int main()
int i,j,len;
bool use = false;
for(i = 1;;i++) //寻找连分数循环节,j-i是最小循环周期
c[i] = a[i - 1] * q[i - 1] - c[i - 1];
a[i] = (a[0] + c[i])/q[i];
if(!use)
for(j = 0;j i;j++)
if(c[i] == c[j] a[i] == a[j] q[i] == q[j])
len = i - j;
break;
if(j i)
len = 1;
memset(h[i].a,0,sizeof(h[i].a));
memset(k[i].a,0,sizeof(k[i].a));
h[i].len = k[i].len = 0;
h[0].a[0] = a[0],h[0].len = 1;
h[1].a[0] = a[0] * a[1] + 1;
h[1].len = 1;
k[0].a[0] = 1,k[0].len = 1;
k[1].a[0] = a[1],k[1].len = 1;
go(a[i]);
printf("x = ");
printf(" ");
printf("y = ");
printf("\n");
system("PAUSE");
return 0;
佩尔方程
Pell方程,由费马提出,但后来欧拉误记为佩尔提出,并写入他的著作中.后人多称佩尔方程.沿续至今.
基本内容
设d是正整数,且d不含平方因子.
下面的不定方程称为佩尔(Pell)方程:
求正整数解(x,y).
这是初等数论中最经典的内容之一.
假设(x_0,y_0)是一个最小解, 那么所有的解可写为
佩尔方程与连分数,二次型,代数数域等等都有密切联系.
在一般的函数域上,我们也有类似的佩尔方程, 它和向量丛的稳定性有着微妙的关系.
#includestdio.h
#includestring.h
int?main()
int?n?=?0,?m?=?0;
int?i?=?0,j?=?0;
char?*p?=?NULL;
while(EOF?!=scanf("%d",n))
if?(n?1?||?n?1000)
continue;
while?(i?n)
scanf("%d?%s",m,a);
p?=?a?+?m;
*(p?-?1)?=?'\0';
printf("%d?%s%s\n",++i,a,p);
return?0;
#include?stdio.h
#include?"stdlib.h"
int?main(void){
int?n,i,j,k,t,r,*p;
printf("Input?n(int?n0)...\nn=");
if(scanf("%d",n)!=1?||?n1){
printf("Input?error,?exit...\n");
if((p=(int?*)malloc(sizeof(int)*n))==NULL){
printf("Application?memory?failure...\n");
printf("Input?k(int?0k100000)...\n");
i=-1;
while(++in){
printf("Error,?redo:");
fflush(stdin);
p[i]=k;
for(t=0;tn;t++)
printf("%d\n",r);
else
printf("%d\n",p[t]);
free(p);
佩尔方程是一种不定二次方程.
设d是正整数,且非平方数.
....(1)
(1)一定有无穷多组正整数解
假设( )是①中使 最小的正整数解(称(1)的基本解), 那么①的所有的正整数解可写为
且不难导出x_n,y_n满足的线性递推关系
以上的公式就是Pell方程的一般形态
佩尔方程通解
d不为完全平方数时时存在无穷多个解
解的存在性证明:
(1) 首先证明存在无穷多个正整数 满足 .
记 = ,考察集合 ,显然对于任意正整数Q1,均存在 满足 (事实上,此集合中每个元数都在(0,1)之内 . 作区间 、 、 、 ,那么当 从0取到Q时,由抽屉原理即知)
于是 ,
即 .
让Q从小到大取遍所有正整数,就可得到无穷多组正整数 .