diff --git a/Project-Euler/Problem029.js b/Project-Euler/Problem029.js new file mode 100644 index 0000000000..d7180ea434 --- /dev/null +++ b/Project-Euler/Problem029.js @@ -0,0 +1,17 @@ +// https://projecteuler.net/problem=29 + +/* +How many distinct terms are in the sequence generated by a^b for 2 <= a <= 100 and 2 <= b <= 100? +*/ + +export const distinctPowers = (limit = 100) => { + if (limit < 2) throw new Error('Power out of scope') + // A Set data structure to keep track of distinct powers + let distinctPowerSet = new Set() + for (let a = 2; a <= limit; a++) { + for (let b = 2; b <= limit; b++) { + distinctPowerSet.add(Math.pow(a, b)) + } + } + return distinctPowerSet.size +} diff --git a/Project-Euler/test/Problem029.test.js b/Project-Euler/test/Problem029.test.js new file mode 100644 index 0000000000..df6c826349 --- /dev/null +++ b/Project-Euler/test/Problem029.test.js @@ -0,0 +1,17 @@ +import { distinctPowers } from '../Problem029' + +describe('Distinct numbers of a ^ b where a and b in range [2,100]', () => { + it('should throw error when number is less than 2', () => { + expect(() => distinctPowers(0)).toThrowError('Power out of scope') + }) + it('should throw error when number is negative', () => { + expect(() => distinctPowers(-3)).toThrowError('Power out of scope') + }) + test('if the number is greater than or equal to 2', () => { + expect(distinctPowers(5)).toBe(15) + }) + // Project Euler Condition Check + test('if the number is greater than or equal to 2', () => { + expect(distinctPowers(100)).toBe(9183) + }) +})
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: