# 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: ``` :::