Project Euler/66: Difference between revisions
From charlesreid1
No edit summary |
(→Code) |
||
| Line 48: | Line 48: | ||
This uses the ContinuedFractionBig class we already saw in [[Project Euler/64]]. | This uses the ContinuedFractionBig class we already saw in [[Project Euler/64]]. | ||
Link: https://charlesreid1.com | Link: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066 | ||
ContinuedFractionBig class: https://charlesreid1.com | ContinuedFractionBig class: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066/ContinuedFractionBig.java | ||
Problem066 class: https://charlesreid1.com | Problem066 class: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066/Problem066.java | ||
==Flags== | ==Flags== | ||
{{ProjectEulerFlag}} | {{ProjectEulerFlag}} | ||
Latest revision as of 20:10, 24 March 2019
Problem Statement
Solving Diophantine equations of the form:
$ x^2 - D y^2 = 1 $
Link: https://projecteuler.net/problem=66
Solution Technique
Solving Diophantine equations requires the use of the continued fractions work we did in Problems 64 and 65.
Code
Core algorithm of Problem 66 solution:
public class Problem066 {
public static void main(String[] args) {
solve();
}
public static void solve() {
final int DMAX = 1000;
BigInteger x = BigInteger.ZERO;
// Values of solution x and D at maximum
BigInteger xmax = BigInteger.ZERO;
int Dmax = 0;
for(int D=1; D<=DMAX; D++) {
x = ContinuedFractionBig.solvePell(D);
if(x.compareTo(xmax)>0) {
xmax = x;
Dmax = D;
}
System.out.println("D = "+D+", x = "+x);
}
System.out.println(Dmax);
}
}
This uses the ContinuedFractionBig class we already saw in Project Euler/64.
Link: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066
ContinuedFractionBig class: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066/ContinuedFractionBig.java
Problem066 class: https://git.charlesreid1.com/cs/euler/src/master/scratch/Round2_050-070/066/Problem066.java
Flags