Files
freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-47-distinct-primes-factors.md
2022-01-20 20:30:18 +01:00

114 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5900f39c1000cf542c50feae
title: '問題 47: 相異なる素因数'
challengeType: 5
forumTopicId: 302145
dashedName: problem-47-distinct-primes-factors
---
# --description--
相異なる 2 つの素因数を持つ 2 つの連続する数のうち、最小のものは次のとおりです。
<div style='padding-left: 4em;'>
14 = 2 × 7<br>
15 = 3 × 5
</div>
相異なる 3 つの素因数を持つ 3 つの連続する数のうち、最小のものは次のとおりです。
<div style='padding-left: 4em;'>
644 = 2<sup>2</sup> × 7 × 23<br>
645 = 3 × 5 × 43<br>
646 = 2 × 17 × 19
</div>
それぞれ 4 つの相異なる素因数を持つ 4 つの連続する整数のうち、最小のものを求めなさい。 それらの数の 1 つ目は何ですか。
# --hints--
`distinctPrimeFactors(2, 2)` は数値を返します。
```js
assert(typeof distinctPrimeFactors(2, 2) === 'number');
```
`distinctPrimeFactors(2, 2)` は 14 を返す必要があります。
```js
assert.strictEqual(distinctPrimeFactors(2, 2), 14);
```
`distinctPrimeFactors(3, 3)` は 644 を返す必要があります。
```js
assert.strictEqual(distinctPrimeFactors(3, 3), 644);
```
`distinctPrimeFactors(4, 4)` は 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;
}
```