网站首页 > 文章中心 > 其它

Pell函数c语言

作者:小编 更新时间:2023-08-28 14:23:04 浏览量:343人看过

求解一个佩尔方程

方程没有10亿以内的解,手动计算应该是行不通的

我写了一个程序,计算出方程的一组特解:

Pell函数c语言-图1

程序附在后面,C++写的,任何一个windows平台下的C++编译器都可以编译(VC++,DEVCPP等等),涉及到大整数的运算比较麻烦,用matlab写起来会更简单

程序清单:

#include stdio.h

#include stdlib.h

#include memory.h

#include math.h

{

INT a[LEN];//存放大整数的数组

/*实际是计算:

这是连分数的递推形式

Pell函数c语言-图2

*/

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)是一个最小解, 那么所有的解可写为

佩尔方程与连分数,二次型,代数数域等等都有密切联系.

在一般的函数域上,我们也有类似的佩尔方程, 它和向量丛的稳定性有着微妙的关系.

简单C语言求大神

#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;

C语言,数据结构,

#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);

pell方程通解

佩尔方程是一种不定二次方程.

设d是正整数,且非平方数.

....(1)

(1)一定有无穷多组正整数解

假设( )是①中使 最小的正整数解(称(1)的基本解), 那么①的所有的正整数解可写为

且不难导出x_n,y_n满足的线性递推关系

以上的公式就是Pell方程的一般形态

佩尔方程通解

d不为完全平方数时时存在无穷多个解

解的存在性证明:

(1) 首先证明存在无穷多个正整数 满足 .

记 = ,考察集合 ,显然对于任意正整数Q1,均存在 满足 (事实上,此集合中每个元数都在(0,1)之内 . 作区间 、 、 、 ,那么当 从0取到Q时,由抽屉原理即知)

于是 ,

即 .

让Q从小到大取遍所有正整数,就可得到无穷多组正整数 .

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章