114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | id: 5900f39c1000cf542c50feae | |||
|  | title: 'Problem 47: Distinct primes factors' | |||
|  | challengeType: 5 | |||
|  | forumTopicId: 302145 | |||
|  | dashedName: problem-47-distinct-primes-factors | |||
|  | --- | |||
|  | 
 | |||
|  | # --description--
 | |||
|  | 
 | |||
|  | The first two consecutive numbers to have two distinct prime factors are: | |||
|  | 
 | |||
|  | <div style='padding-left: 4em;'> | |||
|  |   14 = 2 × 7<br> | |||
|  |   15 = 3 × 5 | |||
|  | </div> | |||
|  | 
 | |||
|  | The first three consecutive numbers to have three distinct prime factors are: | |||
|  | 
 | |||
|  | <div style='padding-left: 4em;'> | |||
|  |   644 = 2<sup>2</sup> × 7 × 23<br> | |||
|  |   645 = 3 × 5 × 43<br> | |||
|  |   646 = 2 × 17 × 19 | |||
|  | </div> | |||
|  | 
 | |||
|  | Find the first four consecutive integers to have four distinct prime factors each. What is the first of these numbers? | |||
|  | 
 | |||
|  | # --hints--
 | |||
|  | 
 | |||
|  | `distinctPrimeFactors(2, 2)` should return a number. | |||
|  | 
 | |||
|  | ```js | |||
|  | assert(typeof distinctPrimeFactors(2, 2) === 'number'); | |||
|  | ``` | |||
|  | 
 | |||
|  | `distinctPrimeFactors(2, 2)` should return 14. | |||
|  | 
 | |||
|  | ```js | |||
|  | assert.strictEqual(distinctPrimeFactors(2, 2), 14); | |||
|  | ``` | |||
|  | 
 | |||
|  | `distinctPrimeFactors(3, 3)` should return 644. | |||
|  | 
 | |||
|  | ```js | |||
|  | assert.strictEqual(distinctPrimeFactors(3, 3), 644); | |||
|  | ``` | |||
|  | 
 | |||
|  | `distinctPrimeFactors(4, 4)` should return 134043. | |||
|  | 
 | |||
|  | ```js | |||
|  | assert.strictEqual(distinctPrimeFactors(4, 4), 134043); | |||
|  | ``` | |||
|  | 
 | |||
|  | # --seed--
 | |||
|  | 
 | |||
|  | ## --seed-contents--
 | |||
|  | 
 | |||
|  | ```js | |||
|  | function distinctPrimeFactors(targetNumPrimes, targetConsecutive) { | |||
|  | 
 | |||
|  |   return true; | |||
|  | } | |||
|  | 
 | |||
|  | distinctPrimeFactors(4, 4); | |||
|  | ``` | |||
|  | 
 | |||
|  | # --solutions--
 | |||
|  | 
 | |||
|  | ```js | |||
|  | function distinctPrimeFactors(targetNumPrimes, targetConsecutive) { | |||
|  |   function numberOfPrimeFactors(n) { | |||
|  |     let factors = 0; | |||
|  | 
 | |||
|  |     //  Considering 2 as a special case | |||
|  |     let firstFactor = true; | |||
|  |     while (n % 2 == 0) { | |||
|  |       n = n / 2; | |||
|  |       if (firstFactor) { | |||
|  |         factors++; | |||
|  |         firstFactor = false; | |||
|  |       } | |||
|  |     } | |||
|  |     // Adding other factors | |||
|  |     for (let i = 3; i < Math.sqrt(n); i += 2) { | |||
|  |       firstFactor = true; | |||
|  |       while (n % i == 0) { | |||
|  |         n = n / i; | |||
|  |         if (firstFactor) { | |||
|  |           factors++; | |||
|  |           firstFactor = false; | |||
|  |         } | |||
|  |       } | |||
|  |     } | |||
|  | 
 | |||
|  |     if (n > 1) { factors++; } | |||
|  | 
 | |||
|  |     return factors; | |||
|  |   } | |||
|  | 
 | |||
|  |   let number = 0; | |||
|  |   let consecutive = 0; | |||
|  | 
 | |||
|  |   while (consecutive < targetConsecutive) { | |||
|  |     number++; | |||
|  |     if (numberOfPrimeFactors(number) >= targetNumPrimes) { | |||
|  |       consecutive++; | |||
|  |     } else { | |||
|  |       consecutive = 0; | |||
|  |     } | |||
|  |   } | |||
|  |   return number - targetConsecutive + 1; | |||
|  | } | |||
|  | ``` |