2018-09-30 22:01:58 +00:00
---
id: 5900f3a51000cf542c50feb8
title: 'Problem 57: Square root convergents'
2020-11-27 18:02:05 +00:00
challengeType: 5
2019-08-05 16:17:33 +00:00
forumTopicId: 302168
2021-01-13 02:31:00 +00:00
dashedName: problem-57-square-root-convergents
2018-09-30 22:01:58 +00:00
---
2020-11-27 18:02:05 +00:00
# --description--
2020-02-28 12:39:47 +00:00
2018-09-30 22:01:58 +00:00
It is possible to show that the square root of two can be expressed as an infinite continued fraction.
2020-02-28 12:39:47 +00:00
< div style = 'text-align: center;' > $\sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac 1 {2+ \dots}}}$</ div >
2018-09-30 22:01:58 +00:00
By expanding this for the first four iterations, we get:
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
$1 + \\frac 1 2 = \\frac 32 = 1.5$
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
$1 + \\frac 1 {2 + \\frac 1 2} = \\frac 7 5 = 1.4$
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
$1 + \\frac 1 {2 + \\frac 1 {2+\\frac 1 2}} = \\frac {17}{12} = 1.41666 \\dots$
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
$1 + \\frac 1 {2 + \\frac 1 {2+\\frac 1 {2+\\frac 1 2}}} = \\frac {41}{29} = 1.41379 \\dots$
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
The next three expansions are $\\frac {99}{70}$, $\\frac {239}{169}$, and $\\frac {577}{408}$, but the eighth expansion, $\\frac {1393}{985}$, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator.
2020-02-28 12:39:47 +00:00
2021-02-17 19:58:18 +00:00
In the first `n` expansions, how many fractions contain a numerator with more digits than denominator?
2020-02-28 12:39:47 +00:00
2020-11-27 18:02:05 +00:00
# --hints--
2018-09-30 22:01:58 +00:00
2021-02-17 19:58:18 +00:00
`squareRootConvergents(10)` should return a number.
2018-09-30 22:01:58 +00:00
2020-11-27 18:02:05 +00:00
```js
2021-02-17 19:58:18 +00:00
assert(typeof squareRootConvergents(10) === 'number');
2020-11-27 18:02:05 +00:00
```
2018-09-30 22:01:58 +00:00
2021-02-17 19:58:18 +00:00
`squareRootConvergents(10)` should return 1.
2018-09-30 22:01:58 +00:00
2020-11-27 18:02:05 +00:00
```js
2021-02-17 19:58:18 +00:00
assert.strictEqual(squareRootConvergents(10), 1);
```
`squareRootConvergents(100)` should return 15.
```js
assert.strictEqual(squareRootConvergents(100), 15);
```
`squareRootConvergents(1000)` should return 153.
```js
assert.strictEqual(squareRootConvergents(1000), 153);
2018-09-30 22:01:58 +00:00
```
2020-11-27 18:02:05 +00:00
# --seed--
2018-09-30 22:01:58 +00:00
2020-11-27 18:02:05 +00:00
## --seed-contents--
2018-09-30 22:01:58 +00:00
```js
2021-02-17 19:58:18 +00:00
function squareRootConvergents(n) {
2020-09-15 16:57:40 +00:00
2018-09-30 22:01:58 +00:00
return true;
}
2021-02-17 19:58:18 +00:00
squareRootConvergents(1000);
2018-09-30 22:01:58 +00:00
```
2020-11-27 18:02:05 +00:00
# --solutions--
2018-09-30 22:01:58 +00:00
```js
2021-02-17 19:58:18 +00:00
function squareRootConvergents(n) {
function countDigits(number) {
let counter = 0;
while (number > 0) {
counter++;
number = number / 10n;
}
return counter;
}
// Use BigInt as integer won't handle all cases
let numerator = 3n;
let denominator = 2n;
let moreDigitsInNumerator = 0;
for (let i = 2; i < = n; i++) {
[numerator, denominator] = [
numerator + 2n * denominator,
denominator + numerator
];
if (countDigits(numerator) > countDigits(denominator)) {
moreDigitsInNumerator++;
}
}
return moreDigitsInNumerator;
}
2018-09-30 22:01:58 +00:00
```