列挙-ペル方程式

タイトルの説明:
ここに画像の説明を挿入アルゴリズムのアイデア:
x ^ 2-n y ^ 2 = 1によると、x = sqrt(1 + n y ^ 2)を取得できるため、yを列挙するだけです。

実装コード:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

int main(){
    
    
	int x=0,y=1,n,m;
	cin>>n;
	// 判断是否为非平方数
	m = (int)sqrt(n);
	if((m*m)==n){
    
    
		cout<<"n需为非平方数"<<endl;
		return 0;
	}
	while(1){
    
    
		int a = n*y*y;
		x = (int)sqrt(1+a);
		if(x>1000000000){
    
     	
			cout<<"  此算法不能解方程x^2-"<<n<<"*y^2=1"<<endl;
          	break;
		}
		if((x*x)==(a+1)){
    
    
			cout<<x<<' '<<y<<endl;
			break;
		}
		y++;
	}
	return 0;
} 

演算結果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45666249/article/details/114702396