freeCodeCamp/curriculum/challenges/italian/10-coding-interview-prep/project-euler/problem-47-distinct-primes-...

95 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
id: 5900f39c1000cf542c50feae
title: 'Problema 47: Fattori primi distinti'
challengeType: 1
forumTopicId: 302145
dashedName: problem-47-distinct-primes-factors
---
# --description--
I primi due numeri consecutivi ad avere due distinti fattori primi sono:
<div style='padding-left: 4em;'>
14 = 2 × 7<br>
15 = 3 × 5
</div>
I primi tre numeri consecutivi che hanno tre fattori primi distinti sono:
<div style='padding-left: 4em;'>
644 = 2<sup>2</sup> × 7 × 23<br>
645 = 3 × 5 × 43<br>
646 = 2 × 17 × 19
</div>
Trova i primi quattro interi consecutivi ad avere quattro distinti fattori primi ciascuno. Qual è il primo di questi numeri?
# --hints--
`distinctPrimeFactors(2, 2)` dovrebbe restituire un numero.
```js
assert(typeof distinctPrimeFactors(2, 2) === 'number');
```
`distinctPrimeFactors(2, 2)` dovrebbe restituire 14.
```js
assert.strictEqual(distinctPrimeFactors(2, 2), 14);
```
`distinctPrimeFactors(3, 3)` dovrebbe restituire 644.
```js
assert.strictEqual(distinctPrimeFactors(3, 3), 644);
```
`distinctPrimeFactors(4, 4)` dovrebbe restituire 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) {
const primeLimit = targetNumPrimes * targetConsecutive * 10000;
const numFactors = Array(primeLimit).fill(0);
let numConsecutive = 0;
for (let i = 2; i < primeLimit; i++) {
if (numFactors[i] === targetNumPrimes) {
// Current number is composite with target num factors
numConsecutive++;
if (numConsecutive === targetConsecutive) {
return i - numConsecutive + 1;
}
} else {
// Current number is not matching composite
numConsecutive = 0;
if (numFactors[i] === 0) {
// Current number is prime
for (let j = i; j < primeLimit; j += i) {
numFactors[j]++;
}
}
}
}
}
```