From e5677972de6e07d42afdcee0305bd32dc85a70fb Mon Sep 17 00:00:00 2001 From: Adhiraj Date: Thu, 21 Oct 2021 23:08:30 +0530 Subject: [PATCH] merge: added Problem 25 to Euler (#793) * added Problem 25 * fixed alert * fixed alert * rewrote to improve runtime * Update Problem025.js * fixed typo * added test file for Project-Euler/Problem025.js * Update Project-Euler/test/Problem025.test.js Co-authored-by: Rak Laptudirm * Update Problem025.test.js Co-authored-by: Rak Laptudirm --- Project-Euler/Problem025.js | 45 +++++++++++++++++++++++++++ Project-Euler/test/Problem025.test.js | 27 ++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 Project-Euler/Problem025.js create mode 100644 Project-Euler/test/Problem025.test.js diff --git a/Project-Euler/Problem025.js b/Project-Euler/Problem025.js new file mode 100644 index 000000000..236ef90e6 --- /dev/null +++ b/Project-Euler/Problem025.js @@ -0,0 +1,45 @@ +/** +* Problem 25 - 1000-digit Fibonacci number +* +* @see {@link https://projecteuler.net/problem=25} +* +* The Fibonacci sequence is defined by the recurrence relation: +* +* Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1. +* +* Hence the first 12 terms will be: +* +* F1 = 1 +* F2 = 1 +* F3 = 2 +* F4 = 3 +* F5 = 5 +* F6 = 8 +* F7 = 13 +* F8 = 21 +* F9 = 34 +* F10 = 55 +* F11 = 89 +* F12 = 144 +* The 12th term, F12, is the first term to contain three digits. + +* What is the index of the first term in the Fibonacci sequence to contain 1000 digits? +*/ + +// brute force method + +function fibonacciIndex(t = 1000) { + let digits = 10n**BigInt(t-1), + fib0 = BigInt(0), + fib1 = BigInt(1), + index = 1 + while (fib1 < digits) { // using this to compare number of digits instead of .toString() significantly improved run time + const tempfib = fib1 + fib1 = fib1 + fib0 + fib0 = tempfib + index += 1 + } + return(index) +} + +export { fibonacciIndex } diff --git a/Project-Euler/test/Problem025.test.js b/Project-Euler/test/Problem025.test.js new file mode 100644 index 000000000..e5b0627e1 --- /dev/null +++ b/Project-Euler/test/Problem025.test.js @@ -0,0 +1,27 @@ +import { fibonacciIndex } from '../Problem025' + +describe ('Check Problem 25 - 1000 digit Fibonnaci number', () => { + it('First term of the Fibonnaci sequence containing 3 digits', () => { + expect(fibonacciIndex(3)).toBe(12) + }) + + it('First term of the Fibonnaci sequence containing 10 digits', () => { + expect(fibonacciIndex(10)).toBe(45) + }) + + it('First term of the Fibonnaci sequence containing 50 digits', () => { + expect(fibonacciIndex(50)).toBe(237) + }) + + it('First term of the Fibonnaci sequence containing 100 digits', () => { + expect(fibonacciIndex(100)).toBe(476) + }) + + it('First term of the Fibonnaci sequence containing 1000 digits', () => { + expect(fibonacciIndex(1000)).toBe(4782) + }) + + it('First term of the Fibonnaci sequence containing 10000 digits', () => { + expect(fibonacciIndex(10000)).toBe(47847) + }) +})