Project Euler/66: Difference between revisions
From charlesreid1
(Created page with "==Problem Statement== Link: https://projecteuler.net/problem=66 ==Solution Technique== ==Code== Link: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-...") |
No edit summary |
||
| Line 1: | Line 1: | ||
==Problem Statement== | ==Problem Statement== | ||
Solving Diophantine equations of the form: | |||
<math> | |||
x^2 - D y^2 = 1 | |||
</math> | |||
Link: https://projecteuler.net/problem=66 | Link: https://projecteuler.net/problem=66 | ||
==Solution Technique== | ==Solution Technique== | ||
Solving Diophantine equations requires the use of the continued fractions work we did in Problems 64 and 65. | |||
==Code== | ==Code== | ||
Core algorithm of Problem 66 solution: | |||
<pre> | |||
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); | |||
} | |||
} | |||
</pre> | |||
This uses the ContinuedFractionBig class we already saw in [[Project Euler/64]]. | |||
Link: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066 | Link: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066 | ||
ContinuedFractionBig class: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066/ContinuedFractionBig.java | |||
Problem066 class: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066/Problem066.java | |||
==Flags== | ==Flags== | ||
{{ProjectEulerFlag}} | {{ProjectEulerFlag}} | ||
Revision as of 11:08, 8 January 2018
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://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066
ContinuedFractionBig class: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066/ContinuedFractionBig.java
Problem066 class: https://charlesreid1.com:3000/cs/euler/src/master/scratch/Round2_050-070/066/Problem066.java
Flags