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;
 | 
						||
}
 | 
						||
```
 |