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 <raklaptudirm@gmail.com>

* Update Problem025.test.js

Co-authored-by: Rak Laptudirm <raklaptudirm@gmail.com>
This commit is contained in:
Adhiraj
2021-10-21 23:08:30 +05:30
committed by GitHub
parent 1df1cce9ce
commit e5677972de
2 changed files with 72 additions and 0 deletions

View File

@ -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 = Fn1 + Fn2, 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 }

View File

@ -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)
})
})