佩尔方程

佩尔方程

问题描述:
试求关于x,y的不定方程:x^2 - n*y^2 = 1的正整数解。(其中n为非平方正整数)
佩尔(Pell)方程是关于x,y的二次不定方程。当x=1或x=-1,y=0时,显然满足方程。常把x,y中有一个为零的解称为平凡解。
佩尔方程的非平凡解很多,这里只要求出它的最小非平凡解,即x,y为满足方程的最小正整数的解,又称基本解。求出了基本解,其他解可由基本解推出。
对于给定的非平方正整数n,试求出佩尔方程的基本解。
设计思想:
对y从1开始递增1取值枚举,每一个y值计算a=nyy后判别:
若a+1不是平方数,则y增1后再试。
若a+1为某一整数x的平方,则(x,y)即为所求方程的解。因为y是从1开始递增的,所得解是方程的基本解。
  
对于某些非平方数n,方程的解位数大大超过计算机语言有效数字的范围,枚举不可能给出正确的解,因此算法中加了另一个结束算法的条件“x>1000000000”(此结束条件可根据具体情形而定)。
具体实现:

#include <stdio.h>
#include <math.h>

int main()
{ 
	int n,m,x,y;
  	double a;
  	printf("  请输入非平方整数n:");
  	scanf("%d",&n);
 	m=(int)sqrt(n);
  	while (m*m==n)              // 先判断输入的数是否为平方数
    {
		printf("  n须为非平方数!\n");
		scanf("%d",&n);
	}
  	y=0;
  	while (1)
    {
		y++;            // 对y递增枚举
      	a=n*y*y;
      	x=(int)(sqrt(a+1));
      	if((x*x)==(a+1))         // 检测是否满足方程
        {
			printf("  方程x^2-%dy^2=1的基本解为:",n);
            printf(" x=%d, y=%d\n",x,y);
            break;
        }
      	if(x>1000000000)
        {
			printf("  此算法不能解方程x^2-%dy^2=1\n",n);
          	break;
		}
   }
   return 0; 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值