その他格子の設定に関する関数
宣言 |
void setGoldesteinMayerLattice(const T p, const T q); |
概略 |
Goldestein-Mayer格子に設定する
|
引数 |
p |
: |
第一基底ベクトルの第一成分の値 |
q |
: |
第二基底ベクトル以降の第一成分の値 |
|
戻り値 |
なし |
解説 |
第一基底ベクトルの第一成分の値がp,それ以降の基底ベクトルの第一成分がqであるようなGoldestein-Mayer格子に設定する関数です.
また,Goldestein-Mayer格子とは,その格子基底行列が
\[
\begin{pmatrix}
p & 0 & \cdots & 0\\
q & 1 & \cdots & 0\\
\vdots & \vdots & \ddots & \vdots\\
q & 0 & \cdots & 1
\end{pmatrix}
\]
であるような格子のことを言います.
|
サンプル
#include <iostream>
#include "lattice.h"
int main()
{
// 3次正方行列を基底行列に持つ格子
Lattice<int> lat(3, 3);
// Goldestein-Mayer格子に設定
lat.setGoldesteinMayerLattice(2, 3);
// 基底行列の表示
std::cout << lat << std::endl;
return 0;
}
宣言 |
void setSchnorrLattice(const long N, const double c); |
概略 |
Schnorr格子に設定する
C. P. Schnorr. Factoring
Integers by CVP algorithms.(2013)
|
引数 |
|
戻り値 |
なし |
解説 |
Schnorr格子に設定する関数です.
Schnorr格子は本来Schnorrによって提案された,格子問題の一つである最近ベクトル問題(CVP)に素因数分解を帰着させるアルゴリズムに使用する格子です.
具体的には,素因数分解したい合成数Nと精度パラメータcに対して
\[
\begin{pmatrix}
\sqrt{\log p_1} & 0 & \cdots & 0 & N^c\log p_1\\
0 & \sqrt{\log p_2} & \cdots & 0 & N^c\log p_2\\
\vdots & \vdots & \ddots & \vdots & \vdots\\
0 & 0 & \cdots & \sqrt{\log p_n} & N^c\log p_n
\end{pmatrix}
\]
で構成されます.
従って,格子基底行列のサイズは\(m\in\mathbb{Z}_{>0}\)に対して\(m\times (m+1)\)である必要があります.
|
サンプル
#include <iostream>
#include "lattice.h"
int main()
{
// 3次正方行列を基底行列に持つ格子
Lattice<int> lat(3, 3);
// Schnorr格子に設定
lat.setSchnorrLattice(2, 3);
// 基底行列の表示
std::cout << lat << std::endl;
return 0;
}
戻る