diff --git a/Project-Euler/Problem007.js b/Project-Euler/Problem007.js new file mode 100644 index 000000000..009c1a896 --- /dev/null +++ b/Project-Euler/Problem007.js @@ -0,0 +1,27 @@ +import { PrimeCheck } from '../Maths/PrimeCheck.js' + +/** + * Find nth Prime Number + * + * P.S.(Project Euler - 007): + * By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. + * What is the 10001st prime number? + * + * @param {Number} n + * @returns {Number} returns the nth prime number + */ +export const nthPrime = (n) => { + if (n < 1) { + throw new Error('Invalid Input') + } + + let count = 0 + let candidateValue = 1 + while (count < n) { + candidateValue++ + if (PrimeCheck(candidateValue)) { + count++ + } + } + return candidateValue +} diff --git a/Project-Euler/test/Problem007.test.js b/Project-Euler/test/Problem007.test.js new file mode 100644 index 000000000..191d1e06a --- /dev/null +++ b/Project-Euler/test/Problem007.test.js @@ -0,0 +1,17 @@ +import { nthPrime } from '../Problem007.js' + +describe('checking nth prime number', () => { + it('should be invalid input if number is negative', () => { + expect(() => nthPrime(-3)).toThrowError('Invalid Input') + }) + it('should be invalid input if number is 0', () => { + expect(() => nthPrime(0)).toThrowError('Invalid Input') + }) + test('if the number is greater than 0', () => { + expect(nthPrime(10)).toBe(29) + }) + // Project Euler Condition Check + test('if the number is 10001', () => { + expect(nthPrime(10001)).toBe(104743) + }) +})