2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								id: 5900f3781000cf542c50fe8b
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								title: 'Problema 12: Maior número triangular divisível'
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								challengeType: 5
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								forumTopicId: 301746
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dashedName: problem-12-highly-divisible-triangular-number
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --description--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								A sequência de números de triângulos é gerada pela adição de números naturais. Portanto, o número do 7º triângulo é 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. Os primeiros dez termos seriam:
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'text-align: center;' > 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Abaixo está a lista dos 7 primeiros números do triângulo:
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 1:< / b >  1< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 3:< / b >  1, 3< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 6:< / b >  1, 2, 3, 6< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 10:< / b >  1, 2, 5, 10< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 15:< / b >  1, 3, 5, 15< / div >  
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 71:< / b >  1, 2, 3, 21< / div >  
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< div  style = 'padding-left: 4em;' > < b > 28:< / b >  1, 2, 4, 7, 14, 28< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Podemos ver que 28 é o primeiro triângulo a ter mais de cinco divisores.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Qual é o valor do primeiro triângulo a ter mais de `n`  divisores?
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --hints--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(5)`  deve retornar um número. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(typeof divisibleTriangleNumber(5) === 'number');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(5)`  deve retornar 28. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(divisibleTriangleNumber(5), 28);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(23)`  deve retornar 630. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(divisibleTriangleNumber(23), 630);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(167)`  deve retornar 1385280. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(divisibleTriangleNumber(167), 1385280);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(374)`  deve retornar 17907120. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(divisibleTriangleNumber(374), 17907120);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-02 23:05:44 +09:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`divisibleTriangleNumber(500)`  deve retornar 76576500. 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(divisibleTriangleNumber(500), 76576500);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --seed--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --seed-contents--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function divisibleTriangleNumber(n) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								divisibleTriangleNumber(500);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --solutions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function divisibleTriangleNumber(n) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if (n === 1) return 3;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let counter = 1;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let triangleNumber = counter++;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 while (noOfFactors(triangleNumber) <  n )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								   triangleNumber += counter++;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								return triangleNumber;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function noOfFactors(num) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const primeFactors = getPrimeFactors(num);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let prod = 1;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for(let p in primeFactors) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    prod *= (primeFactors[p] + 1)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return prod;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								function getPrimeFactors(num) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let n = num;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let primes = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let p = 2;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  let sqrt = Math.sqrt(num);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  function checkAndUpdate(inc) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (n % p === 0) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const curr = primes[p];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if (curr) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        primes[p]++
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } else {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        primes[p] = 1;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      n /= p;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } else {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      p += inc;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  while(p === 2 & &  p < = n) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    checkAndUpdate(1);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  while (p < = n & &  p < = sqrt) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    checkAndUpdate(2);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if(Object.keys(primes).length === 0) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    primes[num] = 1;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } else if(n !== 1) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    primes[n] = 1;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return primes;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```