# 3桁の数学問題
:::{container} prog-cpp
以下の数学問題をHi-QUBOを使って解きましょう.
> **数学問題**:
> **各桁の積**が **252** となる3桁の奇数をすべて求めよ.
$x$,$y$,$z$ をそれぞれ百の位,十の位,一の位の数字とします.
より具体的には:
- $x$ は $[1, 9]$ の整数,
- $y$ は $[0, 9]$ の整数,
- $t$ は $[0, 4]$ の整数,
- $z = 2t + 1$($z$ は奇数).
3桁の整数 $xyz$ の値 $v$ は
$$
\begin{aligned}
v&=100x+10y+z
\end{aligned}
$$
次の条件を満たすすべての解を求めます:
$$
\begin{aligned}
xyz &= 252
\end{aligned}
$$
## Hi-QUBOプログラム
以下のHi-QUBOプログラムはすべての解を求めます:
```{literalinclude} /../programFiles/cppPrograms/example/math/three-digit-program1.cpp
:language: cpp
:caption: three-digit-program1.cpp
```
このプログラムでは,**`x`**,**`y`**,**`t`** が上記の範囲を持つ整数変数として定義されています.
次に **`z`**,**`v`**,**`f`** が式として定義されます.
`f` に対するExhaustive Solverインスタンスを作成し,すべての最適解を `sols` に格納します.
`x`,`y`,`t` は複数のバイナリ変数で符号化されるため,異なるバイナリ割り当てが同じ整数値を表す場合があります.
その結果,同じ桁の組 (`x`,`y`,`z`) が `sols` に複数回現れることがあります.
そのため,結果の整数値 `v` のみを収集する `std::set` 型の `s` を使用して重複を除去しています.
`s` 内の整数は以下のように出力されます:
```{include} /../programFiles/markDown/example/math/three-digit.md
:start-after:
:end-before:
```
:::
:::{container} prog-python
以下の数学問題をPyQBPPを用いて解きます.
> **数学問題**:
> **各桁の積**が**252**である3桁の奇数をすべて求めてください.
$x$,$y$,$z$ をそれぞれ百の位,十の位,一の位の数字とします.
より具体的には:
- $x$ は $[1, 9]$ の整数,
- $y$ は $[0, 9]$ の整数,
- $t$ は $[0, 4]$ の整数,
- $z = 2t + 1$($z$ は奇数).
3桁の整数 $xyz$ の値 $v$ は
$$
\begin{aligned}
v&=100x+10y+z
\end{aligned}
$$
以下を満たすすべての解を求めます:
$$
\begin{aligned}
xyz &= 252
\end{aligned}
$$
## PyQBPPプログラム
以下のPyQBPPプログラムですべての解を求めます:
```{literalinclude} /../programFiles/pythonPrograms/example/math/three-digit-program1.py
:language: python
:caption: three-digit-program1.py
```
このプログラムでは,**`x`**,**`y`**,**`t`** を上記の範囲の整数変数として定義します.
次に **`z`**,**`v`**,**`f`** を式として定義します.
`f` に対するExhaustive Solverインスタンスを作成し,すべての最適解を `result.sols` に格納します.
`x`,`y`,`t` は複数のバイナリ変数でエンコードされるため,異なるバイナリ割り当てが同じ整数値を表す場合があります.
その結果,同じ数字の組 (`x`,`y`,`z`) が `result.sols` に複数回現れる可能性があります.
そのため,結果の整数値 `v` のみを収集する Python 組み込みの `set` 型 `s` を使って重複を除去しています.
`s` 内の整数は以下のように出力されます:
```{include} /../programFiles/markDown/example/math/three-digit.md
:start-after:
:end-before:
```
:::