Square Number HDU - 2281 【佩尔方程 JAVA】

Square Number HDU - 2281

题意:求方程 $$ (4*n+3)^2-48*x^2 =1 $$  满足n<=N的最大正整数解n

思路: 本来想c++写的,感觉可能要爆ll, 因为解出来的仅仅是 4*n+3 相应的值 , 不能保证是4*n+3的倍数

写了个JAVA  , 1A

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {
	static final int MAXN=400;
	static BigInteger []x = new BigInteger[MAXN];
	static BigInteger []y = new BigInteger[MAXN];
	static void init(){
		x[0]=BigInteger.valueOf(7);
		y[0]=BigInteger.valueOf(1);
		BigInteger d=BigInteger.valueOf(48);
		for(int i=1;i<MAXN;i++) {
			x[i]=x[0].multiply(x[i-1]).add(y[i-1].multiply(d));
			y[i]=y[0].multiply(x[i-1]).add(x[0].multiply(y[i-1]));
		}
	}
	public static void main(String []args) {
		init();
		Scanner in = new Scanner(System.in);
		BigInteger n;
		while(true) {
			n=in.nextBigInteger();
			if(n.compareTo(BigInteger.valueOf(0))==0)	break;
			n=n.multiply(BigInteger.valueOf(4)).add(BigInteger.valueOf(3));
			
			BigInteger ansn=BigInteger.valueOf(-1);
			BigInteger ansx=BigInteger.valueOf(-1);
			for(int i=0;i<MAXN;i++) {
				/*System.out.println(x[i] + " " + n);*/
				if(x[i].compareTo(n)==1)	break;
				if(((x[i].subtract(BigInteger.valueOf(3))).mod(BigInteger.valueOf(4))).compareTo(BigInteger.valueOf(0))==0) {
					ansn=x[i];
					ansx=y[i];
				}
			}
			System.out.println((ansn.subtract(BigInteger.valueOf(3))).divide(BigInteger.valueOf(4))+" "+ansx);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Haipai1998/article/details/81611227
今日推荐