在SageMath中安装G6K
在SageMath中安装和使用G6K格筛算法。
目前最出名的G6K库应该是fplll-g6k,这个库只能用于C++或Python,但我个人更习惯用SageMath,考虑到SageMath可以兼容Python,所以打算装一波,并记录过程
安装过程主要参考fplll-g6k的Dockerfile,大概就是进入SageMath的shell,然后在里面编译和调用内置的Python进行安装
安装·
首先克隆仓库
1 | git clone https://github.com/fplll/g6k.git |
然后先check一下Sage内置的Python版本,输入sage -python
,比如我的是
进入Sage的shell,打开里面的Python再check一下,看看是不是和上面的版本对应
1 | sage -sh |
我这里因为对python
做了软链接,而没对python3
做软链接,所以输python3
出的Python版本和上面一样,实在不行可以在装的时候暂时把软链改一下,装完再改回去
版本和编译时间都一样,就可以执行下一步安装,在g6k/
目录中(-j
后面是编译的线程数,按实际情况更改)
1 | python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt |
最后打开Sage,如无意外应该可以正常导g6k
的库
然后就装完了
使用·
前排提醒:G6K的用法我还没摸透,先记一些笔记,然后我也好像没有找到fplll-g6k的文档- -
首先Sage的矩阵可以直接传进fpylll
的IntegerMatrix
中,fpylll
在SageMath中自带,不需要额外安装,然后再按照GitHub上的例子就可以
1 | #!/usr/bin/env sage |
但实测筛出来的结果好像不太理想,原理不明
如果这里best_lifts()
是空的话,也可以
1 | db = list(g6k.itervalues()) |
然后在db
里面找向量
封装一下的话大概就是
1 | #!/usr/bin/env sage |
但实测结果也不太理想,仓库里也没细说initialize_local
的参数要怎么设置
先留个大坑(逃
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tover's Blog!
评论