File tree Expand file tree Collapse file tree 1 file changed +39
-0
lines changed
Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * github author: chrdek
3+ * license: GPL-3.0 or later
4+ *
5+ * @param {number } n = number to be determined whether is a triangular or not
6+ *
7+ * The function below is a mathematical algorithm to check if a given number n is a triangular number.
8+ * A triangular number is one that can be represented
9+ * in the form of the sum of consecutive positive integers starting from 1.
10+ *
11+ * Returns -1 for error input or negative numerical input, 0 for non-triangular
12+ * and an integer value if the number is triangular.
13+ *
14+ * The variable discriminant is calculated as the square root of (1 + 8 * n) and then its square root is taken again.
15+ * The expression Math.sqrt(1 + 8 * n) is the discriminant of the quadratic equation that represents triangular numbers.
16+ *
17+ **/
18+
19+ function IsTriangularNumber ( n ) {
20+ // Ensure the input n is a non-negative integer, retrurn -1 to indicate error.
21+ if ( ! Number . isInteger ( n ) || n < 0 ) {
22+ return - 1 ;
23+ }
24+
25+ // Calculate the discriminant of the quadratic equation
26+ const discriminant = Math . sqrt ( 1 + 8 * n ) ;
27+
28+ // Check if the discriminant is an integer
29+ if ( discriminant % 1 === 0 ) {
30+
31+ // Return half of the integer value of the discriminant
32+ return Math . floor ( discriminant / 2 ) ;
33+ } else {
34+ // If not a triangular number, return 0
35+ return 0 ;
36+ }
37+ }
38+
39+ export { IsTriangularNumber }
You can’t perform that action at this time.
0 commit comments