Files
freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-153-investigating-gaussian-integers.md
2022-01-23 00:08:20 +09:00

85 lines
3.1 KiB
Markdown
Raw Permalink 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: 5900f4051000cf542c50ff18
title: '問題 153: ガウス整数を調べ上げる'
challengeType: 5
forumTopicId: 301784
dashedName: problem-153-investigating-gaussian-integers
---
# --description--
式 $x^2 = -1$ が実数 $x$ に対する解を持たないことは周知のとおりです。
しかし虚数 $i$ を導入すると、この式は 2 つの解を持ちます。$x = i$ と $x = -i$ です。
さらに一歩進めると、式 ${(x - 3)}^2 = -4$ は 2 つの複素数の解を持ちます。$x = 3 + 2i$ と $x = 3 - 2i$ です。これらは互いの共役複素数と呼ばれます。
$a + bi$ の形式で表される数は複素数と呼ばれます。
一般に、$a + bi$ と $a bi$ は互いに共役複素数です。 ガウス整数とは、$a$ と $b$ の両方が整数である複素数 $a + bi$ です。
普通の整数はガウス整数 ($b = 0$ の場合) でもあります。
$b ≠ 0$ であるガウス整数と区別するために、普通の整数を「有理整数」と呼びます。
有理整数 $n$ をガウス整数で割った結果もガウス整数である場合、有理整数を割った方のガウス整数を約数 (divisor) と呼びます。
例えば、5 を $1 + 2i$ で割る場合は次のように簡略化できます。
分子と分母に $1 + 2i$ の共役複素数 ($1 2i$) を乗じます。
結果:
$$\frac{5}{1 + 2i} = \frac{5}{1 + 2i} \frac{1 - 2i}{1 - 2i} = \frac{5(1 - 2i)}{1 - {(2i)}^2} = \frac{5(1 - 2i)}{1 - (-4)} = \frac{5(1 - 2i)}{5} = 1 - 2i$$
したがって、$1 + 2i$ は 5 の約数です。
$1 + i$ が 5 の約数ではないことに注意してください。理由を次に示します。
$$\frac{5}{1 + i} = \frac{5}{2} - \frac{5}{2}i$$
また、ガウス整数 ($a + bi$) が有理整数 $n$ の約数である場合、その共役複素数 ($a bi$) も $n$ の約数であることに注意してください。 実際、5 は 実部が正である約数を 6 つ持ち、それらは {1, 1 + 2i, 1 2i, 2 + i, 2 i, 5} です。
下表は、最初の 5 つの正の有理整数の約数を示しています。
| n | 実部が正であるガウス整数の約数 | 約数の和 s(n) |
| - | ------------------------------------- | --------- |
| 1 | 1 | 1 |
| 2 | 1, 1 + i, 1 - i, 2 | 5 |
| 3 | 1, 3 | 4 |
| 4 | 1, 1 + i, 1 - i, 2, 2 + 2i, 2 - 2i, 4 | 13 |
| 5 | 1, 1 + 2i, 1 - 2i, 2 + i, 2 - i, 5 | 12 |
これにより、実部が正である約数について $\displaystyle\sum_{n=1}^5 (n) = 35$ が得られます。
$1 ≤ n ≤ {10}^5$ のとき、$\displaystyle\sum_{n = 1}^{{10}^5} s(n) = 17924657155$ です。
$\displaystyle\sum_{n=1}^{{10}^8} s(n)$ を求めなさい。
# --hints--
`sumGaussianIntegers()``17971254122360636` を返す必要があります。
```js
assert.strictEqual(sumGaussianIntegers(), 17971254122360636);
```
# --seed--
## --seed-contents--
```js
function sumGaussianIntegers() {
return true;
}
sumGaussianIntegers();
```
# --solutions--
```js
// solution required
```