liblat 関数レファレンスページ

その他格子の設定に関する関数

宣言 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)
引数
N 合成数
c 精度パラメータ
戻り値 なし
解説 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;
}



戻る