-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Add project-euler problem 12 #767
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
8ea9cf5
Add project-euler problem 12
aayushborkar14 3623872
Fix raised alert in problem 12
aayushborkar14 173401c
Fixed for loop in Problem012
aayushborkar14 8d246b7
fix alerts in Problem012
aayushborkar14 44552f2
Merge branch 'master' into master
aayushborkar14 94aad35
Update Problem012
aayushborkar14 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/** | ||
* Problem 12 - Highly divisible triangular number | ||
* | ||
* https://projecteuler.net/problem=11 | ||
* | ||
* The sequence of triangle numbers is generated by adding the natural numbers. | ||
* So the 7th triangle number would be 1 +たす 2 +たす 3 +たす 4 +たす 5 +たす 6 +たす 7 =わ 28. | ||
* | ||
* The first ten terms would be: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... | ||
* Let us list the factors of the first seven triangle numbers: | ||
* | ||
* 1: 1 | ||
* 3: 1,3 | ||
* 6: 1,2,3,6 | ||
* 10: 1,2,5,10 | ||
* 15: 1,3,5,15 | ||
* 21: 1,3,7,21 | ||
* 28: 1,2,4,7,14,28 | ||
* | ||
* We can see that 28 is the first triangle number to have over five divisors. | ||
* | ||
* What is the value of the first triangle number to have over five hundred divisors? | ||
*/ | ||
|
||
/** | ||
* Gets number of divisors of a given number | ||
* @params num The number whose divisors to find | ||
*/ | ||
const getNumOfDivisors = (num) => { | ||
// initialize numberOfDivisors | ||
let numberOfDivisors = 0 | ||
|
||
// if one divisor less than sqrt(num) exists | ||
// then another divisor greater than sqrt(n) exists and its value is num/i | ||
const sqrtNum = Math.sqrt(num) | ||
for (let i = 0; i <= sqrtNum; i++) { | ||
// check if i divides num | ||
if (num % i === 0) { | ||
if (i === sqrtNum) { | ||
// if both divisors are equal, i.e., num is perfect square, then only 1 divisor | ||
numberOfDivisors++ | ||
} else { | ||
// 2 divisors, one of them is less than sqrt(n), other greater than sqrt(n) | ||
numberOfDivisors += 2 | ||
} | ||
} | ||
} | ||
return numberOfDivisors | ||
} | ||
|
||
/** | ||
* Loops till first triangular number with 500 divisors is found | ||
*/ | ||
const firstTriangularWith500Divisors = () => { | ||
let triangularNum | ||
// loop forever until numOfDivisors becomes greater than or equal to 500 | ||
for (let n = 1; ; n++) { | ||
// nth triangular number is (1/2)*n*(n+1) by Arithmetic Progression | ||
triangularNum = (1 / 2) * n * (n + 1) | ||
if (getNumOfDivisors(triangularNum) >= 500) return triangularNum | ||
} | ||
} | ||
|
||
export { firstTriangularWith500Divisors } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { firstTriangularWith500Divisors } from '../Problem012' | ||
|
||
describe('checkFirstTriangularWith500Divisors()', () => { | ||
it('Problem Statement Answer', () => { | ||
const firstTriangular = firstTriangularWith500Divisors() | ||
expect(firstTriangular).toBe(76576500) | ||
}) | ||
}) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.