{"id":121,"date":"2025-03-31T13:13:00","date_gmt":"2025-03-31T05:13:00","guid":{"rendered":"http:\/\/www.triode.cc\/?p=121"},"modified":"2025-09-29T00:23:55","modified_gmt":"2025-09-28T16:23:55","slug":"lattice-based-cryptography","status":"publish","type":"post","link":"https:\/\/www.triode.cc\/index.php\/2025\/03\/31\/lattice-based-cryptography\/","title":{"rendered":"\u683c\u5bc6\u7801"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u53c2\u8003\u8d44\u6599\uff1a<\/p>\n\n\n\n<p>(1) <a href=\"https:\/\/eprint.iacr.org\/2023\/032.pdf\">A Gentle Tutorial for Lattice-Based Cryptanalysis<\/a><\/p>\n\n\n\n<p>(2) <a href=\"https:\/\/link.springer.com\/article\/10.1007\/BF01201999\">Improved low-density subset sum algorithms<\/a><\/p>\n\n\n\n<p>(3) <a href=\"https:\/\/link.springer.com\/article\/10.1007\/s11424-015-3324-9\">Solving low-density multiple subset sum problems with SVP oracle<\/a><\/p>\n\n\n\n<p>(4) <a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-540-74462-7_9\">Extended Hidden Number Problem and Its Cryptanalytic Applications<\/a><\/p>\n\n\n\n<p>(5) <a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/3-540-46701-7_14\">Extending Wiener\u2019s Attack in the Presence of Many Decrypting Exponents<\/a><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u683c\uff08Lattice\uff09<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u683c\u7684\u6982\u5ff5<\/h3>\n\n\n\n<p><strong>\u5b9a\u4e49<\/strong>\uff1a\u4e00\u4e2a\\(n\\)\u7ef4\u7684\u683c\\(\\mathcal{L}\\)\u662f\\(\\mathbb{R}^{n}\\)\u7684\u4e00\u4e2a\u79bb\u6563\u53ef\u52a0\u7684\u5b50\u7fa4. \u5bf9\u4e8e\u683c\\(\\mathcal{L}\\)\uff0c\u5176\u53ef\u4ee5\u88ab\u8868\u793a\u4e3a\u7531\\(\\mathbb{R}^{n}\\)\u4e0a\\(m\\)\u4e2a\u7ebf\u6027\u65e0\u5173\u7684\u57fa\u5411\u91cf\\(\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_m\\}\\)\u7ec4\u6210\u7684\u57fa\\(\\pmb{B}\\)\uff0c\u5411\u91cf\u7684\u4e2a\u6570\\(m\\)\u88ab\u79f0\u4e3a\u683c\\(\\mathcal{L}\\)\u7684\u79e9\uff0c\u6240\u4ee5\u683c\\(\\mathcal{L}\\)\u4e5f\u80fd\u8868\u793a\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>\\mathcal{L}=\\mathcal{L}(\\pmb{B})=\\left\\{\\sum_{i=1}^{m}a_i\\pmb{b}_i|a_i\\in\\mathbb{Z},i=1,2,\\cdots,m\\right\\}<br>$$<\/p>\n\n\n\n<p>\u683c\u7684\u5f88\u591a\u6027\u8d28\u4e0e\u8bb0\u53f7\u4e0e\u7ebf\u6027\u7a7a\u95f4\uff08\u5411\u91cf\u7a7a\u95f4\uff09\u7c7b\u4f3c\u3002 <\/p>\n\n\n\n<p><strong>\u9010\u6b21\u6700\u5c0f\u957f\u5ea6<\/strong>\uff1a\u5bf9\u4e8e\u4e00\u4e2a\u79e9\u7ef4\\(n\\)\u7684\u683c\\(\\mathcal{L}\\)\uff0c\u5bf9\u4e8e\\(i\\in\\{1,2,\\cdots n\\}\\)\uff0c\u82e5\\(r\\)\u662f\u4f7f\u5f97\u683c\\(\\mathcal{L}\\)\u62e5\u6709\\(i\\)\u4e2a\u957f\u5ea6\u6700\u5927\u4e3a\\(r\\)\u4e14\u7ebf\u6027\u65e0\u5173\u7684\u5411\u91cf\u7684\u6700\u5c0f\u503c\uff0c\u5219\u79f0\\(r\\)\u4e3a\u683c\\(\\mathcal{L}\\)\u7684\u7b2c\\(i\\)\u9010\u6b21\u6700\u5c0f\u957f\u5ea6\uff0c\u8bb0\u4e3a\\(\\lambda_i(\\mathcal{L})=r\\) <\/p>\n\n\n\n<p>\u5173\u4e8e\u9010\u6b21\u6700\u5c0f\u957f\u5ea6\uff0c\u6211\u4eec\u6709\u95f5\u53ef\u592b\u65af\u57fa\uff08Minkowski\uff09\u7b2c\u4e00\u5b9a\u7406\uff1a<\/p>\n\n\n\n<p><strong>\u95f5\u53ef\u592b\u65af\u57fa\uff08Minkowski\uff09\u7b2c\u4e00\u5b9a\u7406<\/strong>\uff1a\u8bbe\\(\\mathcal{L}\\)\u662f\u4e00\u4e2a\\(n\\)\u7ef4\u6ee1\u79e9\u683c\uff0c\u5219\uff1a<\/p>\n\n\n\n<p>$$<br>\\lambda_1(\\mathcal{L})\\le\\sqrt{n}|\\det(\\mathcal{L})|^{1\/n}<br>$$<\/p>\n\n\n\n<p>\u95f5\u53ef\u592b\u65af\u57fa\u7b2c\u4e00\u5b9a\u7406\u8868\u660e\u6211\u4eec\u53ef\u4ee5\u4ee5\\(\\lambda_1(\\mathcal{L})\\)\u4e3a\u6807\u51c6\u6765\u8bc4\u5224\u683c\u4e2d\u5411\u91cf\u7684\u957f\u5ea6.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5173\u4e8e\u683c\u7684\u95ee\u9898<\/h3>\n\n\n\n<p><strong>\u6700\u77ed\u5411\u91cf\u95ee\u9898<\/strong>\uff08Shortest Vector Problem, \\(\\text{SVP}\\)\uff09\uff1a\u7ed9\u5b9a\u683c\\(\\mathcal{L}\\)\u7684\u57fa\\(\\pmb{B}\\)\uff0c\u627e\u5230\u683c\\(\\mathcal{L}\\)\u4e0a\u7684\u4e00\u4e2a\u975e\u96f6\u5411\u91cf\\(\\pmb{v}\\)\u6ee1\u8db3\\(||\\pmb{v}||=\\lambda_1(\\mathcal{L})\\). <\/p>\n\n\n\n<p><strong>\u6700\u8fd1\u5411\u91cf\u95ee\u9898<\/strong>\uff08Closest Vector Problem, \\(\\text{CVP}\\)\uff09\uff1a\u7ed9\u5b9a\u683c\\(\\mathcal{L}\\)\u7684\u57fa\\(\\pmb{B}\\)\u4ee5\u53ca\u4e00\u4e2a\u76ee\u6807\u5411\u91cf\\(\\pmb{t}\\)\uff08\u4e0d\u4e00\u5b9a\u5728\u683c\\(\\mathcal{L}\\)\u4e0a\uff09\uff0c\u627e\u5230\u683c\\(\\mathcal{L}\\)\u4e0a\u7684\u4e00\u4e2a\u975e\u96f6\u5411\u91cf\\(\\pmb{v}\\)\u6ee1\u8db3<\/p>\n\n\n\n<p>$$<br>||\\pmb{v}-\\pmb{t}||=\\min_{\\pmb{w}\\in\\mathcal{L}}||\\pmb{w}-\\pmb{t}||<br>$$<\/p>\n\n\n\n<p>\u4e0a\u8ff0\u95ee\u9898\u5747\u4e3aNP-Hard\u95ee\u9898\uff0c\u8fd9\u4e9b\u95ee\u9898\u7684\u5bbd\u677e\u7248\u672c\u5982\u4e0b\uff1a <\/p>\n\n\n\n<p><strong>\u8fd1\u4f3c\u6700\u77ed\u5411\u91cf\u95ee\u9898<\/strong>\uff08Approximate Shortest Vector Problem, \\(\\text{SVP}_{\\gamma}\\)\uff09\uff1a\u7ed9\u5b9a\u683c\\(\\mathcal{L}\\)\u7684\u57fa\\(\\pmb{B}\\)\u4e0e\u8fd1\u4f3c\u56e0\u5b50\\(\\gamma\\)\uff0c\u627e\u5230\u683c\\(\\mathcal{L}\\)\u4e0a\u7684\u4e00\u4e2a\u975e\u96f6\u5411\u91cf\\(\\pmb{v}\\)\u6ee1\u8db3\\(||\\pmb{v}||\\le\\gamma\\cdot\\lambda_1(\\mathcal{L}\\)). <\/p>\n\n\n\n<p><strong>\u8fd1\u4f3c\u6700\u8fd1\u5411\u91cf\u95ee\u9898<\/strong>\uff08Approximate Closest Vector Problem, \\(\\text{CVP}_{\\gamma}\\)\uff09\uff1a\u7ed9\u5b9a\u683c\\(\\mathcal{L}\\)\u7684\u57fa\\(\\pmb{B}\\)\u3001\u4e00\u4e2a\u76ee\u6807\u5411\u91cf\\(\\pmb{t}\\)\uff08\u4e0d\u4e00\u5b9a\u5728\u683c\\(\\mathcal{L}\\)\u4e0a\uff09\u4ee5\u53ca\u4e00\u4e2a\u8fd1\u4f3c\u56e0\u5b50\\(\\gamma\\)\uff0c\u627e\u5230\u683c\\(\\mathcal{L}\\)\u4e0a\u7684\u4e00\u4e2a\u975e\u96f6\u5411\u91cf\\(\\pmb{v}\\)\u6ee1\u8db3<\/p>\n\n\n\n<p>$$<br>||\\pmb{v}-\\pmb{t}||=\\gamma\\cdot\\min_{\\pmb{w}\\in\\mathcal{L}}||\\pmb{w}-\\pmb{t}||<br>$$<\/p>\n\n\n\n<p>\u800c\\(\\text{SVP}_{\\gamma}\\)\u4e0e\\(\\text{CVP}_{\\gamma}\\)\u5bf9\u4e8e\u786e\u5b9a\u7684\u53c2\u6570\u5747\u5b58\u5728\u6709\u6548\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u89e3\u51b3\\(\\text{SVP}_{\\gamma}\\)\u4e0e\\(\\text{CVP}_{\\gamma}\\)\u6765\u8fd1\u4f3c\u5730\u89e3\u51b3\\(\\text{SVP}\\)\u4e0e\\(\\text{CVP}\\). \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u683c\u57fa\u89c4\u7ea6\u6765\u89e3\u51b3\u4e0a\u8ff0\u4e24\u4e2a\u53ef\u8ba1\u7b97\u95ee\u9898.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u683c\u57fa\u89c4\u7ea6<\/h3>\n\n\n\n<p>\u683c\u57fa\u89c4\u7ea6\u7684\u76ee\u6807\u662f\u5c06\u4e00\u4e2a\u4efb\u610f\u4e00\u4e2a\u683c\u8f6c\u5316\u4e3a\u53e6\u5916\u4e00\u4e2a\u57fa\u76f8\u540c\u4f46\u662f\u5177\u6709\u66f4\u77ed\u3001\u66f4\u591a\u7684\u6b63\u4ea4\u5411\u91cf\u3002\u7531\u4e8e\u6211\u4eec\u8981\u627e\u7684\u662f\u201c\u77ed\u5411\u91cf\u201d\uff0c\u6240\u4ee5\u683c\u57fa\u89c4\u7ea6\u53ef\u80fd\u4f1a\u63d0\u4f9b\u89e3\u51b3\u8fd1\u4f3c\u6700\u77ed\u5411\u91cf\u95ee\u9898\u7684\u65b9\u6cd5.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">LLL\u7b97\u6cd5<\/h4>\n\n\n\n<p>LLL\u7b97\u6cd5\u662f\u4e00\u4e2a\u8fed\u4ee3\u7b97\u6cd5\uff0c\u7531Lenstra\u3001Lenstra\u4e0eLov\u00e1sz\u63d0\u51fa. \u8fd9\u4e2a\u8fed\u4ee3\u7b97\u6cd5\u7684\u7b2c\u4e00\u6b65\u662f\u901a\u8fc7\u65bd\u5bc6\u7279\u6b63\u4ea4\u5316\u83b7\u5f97\u57fa\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\u7684\u4e00\u7ec4\u6b63\u4ea4\u57fa\uff0c\u901a\u8fc7\u65bd\u5bc6\u7279\u6b63\u4ea4\u5316\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u683c\u57fa\u8fdb\u884c\u7ea6\u51cf\uff0c\u5bf9\u4e8e\u4e0a\u9762\u7684\u57fa\\(\\pmb{B}\\)\uff0c\u65bd\u5bc6\u7279\u6b63\u4ea4\u5316\u8fc7\u7a0b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>$$<br>\\begin{cases} \\pmb{b}_i^{*}=\\pmb{b}_i,&amp;i=1\\\\ \\pmb{b}_i^{*}=\\pmb{b}_i-\\sum_{j=1}^{i-1}\\mu_{i,j}\\pmb{b}_j^{*},&amp;1&lt;i\\le n \\end{cases}\\kern{25pt}\\mu_{i,j}=\\frac{\\langle\\pmb{b}_i,\\pmb{b}_{j}^{*}\\rangle}{\\langle\\pmb{b}^{*}_{j},\\pmb{b}^{*}_{j}\\rangle}<br>$$<\/p>\n\n\n\n<p>\u800c\u5bf9\u4e8e\\(\\delta\\in(\\frac{1}{4},1)\\)\uff0c\u5982\u679c\u57fa\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\u6ee1\u8db3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\uff08\u5c3a\u5bf8\u7ea6\u51cf\uff0csize-reduction\uff09\u5bf9\u4e8e\u4efb\u610f\\(i&gt;j\\)\uff0c\u6709\\(|\\mu_{i,j}|\\le\\frac{1}{2}\\)\uff1b<\/li>\n\n\n\n<li>\uff08Lov\u00e1sz\u6761\u4ef6\uff0cLov\u00e1sz condition\uff09\u5bf9\u4e8e\u4efb\u610f\\(i\\in\\{1,2,\\cdots,n-1\\}\\)\uff0c\u6709\\((\\delta-\\mu_{i+1,i}^{2})||\\pmb{b}_{i}^{*}||^{2}\\le||\\pmb{b}_{i+1}^{*}||^2\\)<\/li>\n<\/ol>\n\n\n\n<p>\u5219\u79f0\u57fa\\(\\pmb{B}\\)\u4e3a\\(\\delta\\)-LLL\u7ea6\u51cf\u57fa\uff0c\u901a\u8fc7\u7ed3\u5408\u8fd9\u4e24\u4e2a\u6761\u4ef6\uff0cLenstra\u3001Lenstra\u4e0eLov\u00e1sz\u7ed9\u51fa\u4e86LLL\u7b97\u6cd5\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-7.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-7.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"611\" height=\"199\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-7.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-124\"  sizes=\"auto, (max-width: 611px) 100vw, 611px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u800c\u5bf9\u4e8e\u683c\u4e2d\u6700\u77ed\u5411\u91cf\u7684\u4e0b\u754c\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u5b9a\u7406\uff1a \u8bbe\u683c\u57fa\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\u5bf9\u5e94\u7684\u65bd\u5bc6\u7279\u6b63\u4ea4\u57fa\u4e3a\u57fa\\(\\pmb{B}^*=\\{\\pmb{b}_1^*,\\pmb{b}_2^*,\\cdots,\\pmb{b}_n^*\\}\\)\uff0c\u5219\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>\\lambda_1(\\mathcal{L}(\\pmb{B}))\\ge\\min_{i\\in\\{1,\\cdots,n\\}}||\\pmb{b}^{*}_{i}||<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7\u8fd9\u4e2a\u5b9a\u7406\uff0c\u6211\u4eec\u53ef\u4ee5\u5bfc\u51fa\u5982\u4e0b\u547d\u9898\uff1a \u5047\u82e5\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\u662f\u4e00\u4e2a\\(\\delta\\)-LLL\u7ea6\u51cf\u57fa\uff0c\u5219\u5fc5\u7136\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>||\\pmb{b}_1||\\le\\left(\\frac{2}{\\sqrt{4\\delta-1}}\\right)^{n-1}\\sqrt{n}\\cdot|\\det(\\mathcal{L})|^{1\/n}<br>$$<\/p>\n\n\n\n<p>\u8fd9\u6761\u5f0f\u5b50\u5f80\u5f80\u53ef\u4ee5\u5e2e\u52a9\u6211\u4eec\u5224\u65ad\u4e00\u4e2a\u683c\u57fa\u662f\u5426\u80fd\u901a\u8fc7LLL\u6765\u7ea6\u51cf\u51fa\u6700\u77ed\u5411\u91cf. \u5728sage\u4e2d\u5185\u7f6e\u4e86\u73b0\u6210\u7684LLL\u7b97\u6cd5\uff0c\u4f8b\u5982\u6211\u4eec\u8981\u89e3\u51b3<a href=\"https:\/\/eprint.iacr.org\/2023\/032.pdf\">A Gentle Tutorial for Lattice-Based Cryptanalysis<\/a>\u4e2d\u7684\u4f8b3.12\uff08\u5982\u4e0b\u56fe\uff09\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-8.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"611\" height=\"36\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-125\"  sizes=\"auto, (max-width: 611px) 100vw, 611px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u5219\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u7684\u6b65\u9aa4\u6765\u83b7\u5f97\u7ed3\u679c\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-9.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-9.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"288\" height=\"115\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-9.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-126\"\/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u663e\u7136\u53ef\u4ee5\u5f97\u5230\u7ed3\u679c\u4e3a\\(\\pmb{b}_1^*=(0,-1),\\pmb{b}_2^*=(-2,0)\\).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u89e3\u51b3CVP<\/h3>\n\n\n\n<p>LLL\u7b97\u6cd5\u540c\u6837\u53ef\u4ee5\u7528\u6765\u89e3\u51b3\u8fd1\u4f3c\u6700\u8fd1\u5411\u91cf\u95ee\u9898\uff0c\u4f46\u662f\u9700\u8981\u7ed3\u5408Babai\u6700\u8fd1\u5e73\u9762\u7b97\u6cd5\u6216\u8005Kannan\u5d4c\u5165\u6cd5<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Babai\u6700\u8fd1\u5e73\u9762\u7b97\u6cd5\uff08Babai\u2019s Nearest Plane Algorithm\uff09<\/h4>\n\n\n\n<p>Babai\u6700\u8fd1\u5e73\u9762\u7b97\u6cd5\u9996\u5148\u8981\u83b7\u5f97\u8f93\u5165\u683c\u7684\u7ea6\u51cf\u57fa\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\uff0c\u7136\u540e\u5bf9\u4e8e\u76ee\u6807\u5411\u91cf\\(\\pmb{t}\\)\uff0c\u6211\u4eec\u4ee4\\(\\pmb{t}&#8217;=\\pmb{t}-c_n\\pmb{b}_n\\)\uff0c\u5176\u4e2d\uff1a\\(c_n=\\lceil\\langle\\pmb{t},\\pmb{b}^*_{n}\\rangle\/\\langle\\pmb{b}^*_{n},\\pmb{b}^*_{n}\\rangle\\rfloor\\)\uff08\u5176\u4e2d\\(\\lceil\\cdot\\rfloor\\)\u8868\u793a\u56db\u820d\u4e94\u5165\uff09\uff0c\u7136\u540e\u5bf9\u524d\\(n-1\\)\u4e2a\u5411\u91cf\u4e0e\\(\\pmb{t}&#8217;\\)\u8fdb\u884c\u64cd\u4f5c\uff0c\u5f97\u5230\\(\\pmb{t}&#8221;=\\pmb{t}&#8217;-c_{n-1}\\pmb{b}_{n-1}\\)\uff0c\u5176\u4e2d\\(c_n=\\lceil\\langle\\pmb{t}&#8217;,\\pmb{b}^*_{n-1}\\rangle\/\\langle\\pmb{b}^*_{n-1},\\pmb{b}^*_{n-1}\\rangle\\rfloor\\)\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u5b8c\u6574\u7684Babai\u6700\u8fd1\u5e73\u9762\u7b97\u6cd5\uff1a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-10.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-10.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"159\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-10.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-127\"  sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Kannan\u5d4c\u5165\u6cd5<\/h4>\n\n\n\n<p>Kannan\u5d4c\u5165\u6cd5\u662f\u901a\u8fc7\u5c06\u76ee\u6807\u5411\u91cf\u5d4c\u5165\u683c\u57fa\uff0c\u4ece\u800c\u5c06CVP\u8f6c\u5316\u4e3aSVP\u8fdb\u884c\u6c42\u89e3\uff0c\u8bbe\u8f93\u5165\u7684\u683c\u57fa\u4e3a\\(\\pmb{B}=\\{\\pmb{b}_1,\\pmb{b}_2,\\cdots,\\pmb{b}_n\\}\\)\uff0c\u800c\u76ee\u6807\u5411\u91cf\u4e3a\\(\\pmb{t}=(t_1,t_2,\\cdots,t_n)\\)\uff0c\u6211\u4eec\u8bbeCVP\u7684\u89e3\u4e3a\\(c_1\\pmb{b}_1+c_2\\pmb{b}_2+\\cdots+c_n\\pmb{b}_n\\)\uff0c\u5373\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{t}\\approx\\sum_{i=1}^{n}c_i\\pmb{b}_i<br>$$<\/p>\n\n\n\n<p>\u4e5f\u5c31\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{t}=\\sum_{i=1}^{n}c_i\\pmb{b}_i+\\pmb{e}<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(||\\pmb{e}||\\)\u5f88\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u53ef\u4ee5\u6784\u9020\u51fa\u4e00\u4e2a\\(n+1\\)\u7ef4\u7684\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}&#8217;= \\left(\\begin{matrix} \\pmb{B}&amp;0\\\\ \\pmb{t}&amp;q \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u56e0\u4e3a\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>(-c_1,-c_2,\\cdots,-c_n,1)\\pmb{B}&#8217;=(\\pmb{e},q)<br>$$<\/p>\n\n\n\n<p>\u6240\u4ee5\u8fd9\u4e2a\u683c\u663e\u7136\u5305\u542b\u77ed\u5411\u91cf\\((\\pmb{e},q)\\)\uff0c\u7531\u6b64\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230CVP\u7684\u89e3\u4e3a\\(\\pmb{t}-\\pmb{e}\\). \u5728\u8fd9\u91cc\uff0c\u6574\u6570\\(q\\)\u79f0\u4e3a\u5d4c\u5165\u56e0\u5b50\uff0c\u5b83\u4f1a\u5f71\u54cd\u5230\u901a\u8fc7LLL\u7b97\u6cd5\u5bfb\u627e\u6b63\u786e\u5411\u91cf\u7684\u6210\u529f\u7387\uff0c\u5e94\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u53d6.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u683c\u5728\u5bc6\u7801\u5b66\u4e2d\u7684\u5e94\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u80cc\u5305\u95ee\u9898\uff08Knapsack Problem\uff09<\/h3>\n\n\n\n<p>\u80cc\u5305\u95ee\u9898\u662fNP\u5b8c\u5168\u95ee\u9898\uff0c\u5176\u7ecf\u5e38\u88ab\u7528\u4e8e\u4f5c\u4e3a\u516c\u94a5\u5bc6\u7801\u4f53\u7cfb\u7684\u9677\u9631\u95e8\u3002\u5728\u5bc6\u7801\u5b66\u4e2d\uff0c\u80cc\u5305\u95ee\u9898\u7684\u5e38\u89c1\u7248\u672c\u4e3a\u5b50\u96c6\u548c\u95ee\u9898\uff0c\u5373\uff1a\u7ed9\u5b9a\\(n\\)\u4e2a\u6b63\u6570\\(a_1,a_2,\\cdots,a_n\\)\u4e0e\u4e00\u4e2a\u6574\u6570\\(s\\)\uff0c\u5bfb\u627e\u96c6\u5408\\(\\{a_1,a_2,\\cdots,a_n\\}\\)\u7684\u5b50\u96c6\u4f7f\u5f97\u5176\u548c\u4e3a\\(s\\)\u3002\u4e5f\u5c31\u662f\u627e\u5230\\(e_1,e_2,\\cdots,e_n\\in\\{0,1\\}\\)\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>s=\\sum_{i=1}^{n}e_ia_i<br>$$<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4f4e\u5bc6\u5ea6\u5b50\u96c6\u548c\u95ee\u9898<\/h4>\n\n\n\n<p>\u96c6\u5408\\(\\{a_1,a_2,\\cdots,a_n\\}\\)\u7684\u5bc6\u5ea6\\(d\\)\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5f0f\u8ba1\u7b97\uff1a<\/p>\n\n\n\n<p>$$<br>d=\\frac{n}{\\log_2{\\max_{i\\in\\{1,2,\\cdots,n\\}}(a_i)}}<br>$$<\/p>\n\n\n\n<p>\u7814\u7a76\u8868\u660e\uff0c\u5f53\\(d&lt;0.9408\\)\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b50\u96c6\u548c\u95ee\u9898\u8f6c\u6362\u4e3a\u6c42\u89e3SVP. \u4e00\u822c\u7b56\u7565\u4e3a\u6784\u9020\u4e00\u4e2a\u683c\uff0c\u5176\u4e2d\u6709\u4e00\u4e2a\u77ed\u5411\u91cf\u5305\u542b\\(\\{e_1,e_2,\\cdots,e_n\\}\\)\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u6784\u9020\u51fa\u4e0b\u9762\u7684\u683c\u57fa\u77e9\u9635\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} 1&amp;&amp;&amp;&amp;a_1\\\\ &amp;1&amp;&amp;&amp;a_2\\\\ &amp;&amp;\\ddots&amp;&amp;\\vdots\\\\ &amp;&amp;&amp;1&amp;a_n\\\\ &amp;&amp;&amp;&amp;s \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u663e\u7136\u7ebf\u6027\u7ec4\u5408\\((e_1,e_2,\\cdots,e_n,-1)\\)\u4f1a\u751f\u6210\u4e00\u4e2a\u77ed\u5411\u91cf\\((e_1,e_2,\\cdots,e_n,-1)\\pmb{B}=(e_1,e_2,\\cdots,e_n,0)\\)\uff0c\u6240\u4ee5\u6211\u4eec\u7684\u9884\u671f\u662f\u901a\u8fc7LLL\u7b97\u6cd5\u5bf9\u4e0a\u8ff0\u683c\u8fdb\u884c\u89c4\u7ea6\u5f97\u5230\u8fd9\u4e2a\u77ed\u5411\u91cf\uff0c\u4f46\u662f\u8fd9\u4e2a\u65b9\u6cd5\u5728\u5bc6\u5ea6\u6bd4\u8f83\u9ad8\u7684\u65f6\u5019\u4f1a\u5931\u6548\uff0c\u6240\u4ee5Coster\u7b49\u4eba\u63d0\u51fa\u4e86CJLOSS\u7b97\u6cd5\uff0c\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5728\\(d&lt;0.9408\\)\u7684\u65f6\u5019\u901a\u8fc7\u5c06\u5b50\u96c6\u548c\u95ee\u9898\u8f6c\u6362\u4e3aSVP\u4ece\u800c\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u6c42\u89e3\u8fd9\u4e2a\u95ee\u9898\uff0cCJLOSS\u7b97\u6cd5\u4e2d\u6784\u9020\u7684\u683c\u4e3a\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}&#8217;=\\left(\\begin{matrix} 1&amp;&amp;&amp;&amp;Na_1\\\\ &amp;1&amp;&amp;&amp;Na_2\\\\ &amp;&amp;\\ddots&amp;&amp;\\vdots\\\\ &amp;&amp;&amp;1&amp;Na_n\\\\ \\frac{1}{2}&amp;\\frac{1}{2}&amp;\\cdots&amp;\\frac{1}{2}&amp;Ns \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\u6574\u6570\\(N&gt;\\sqrt{n}\\)\uff0c\u5728\u8fd9\u4e2a\u683c\u5185\uff0c\u7ebf\u6027\u7ec4\u5408\\((e_1,e_2,\\cdots,e_n,-1)\\)\u4f1a\u751f\u6210\u53e6\u5916\u4e00\u4e2a\u77ed\u5411\u91cf\uff1a<\/p>\n\n\n\n<p>$$<br>(e_1,e_2,\\cdots,e_n,-1)\\pmb{B}&#8217;=(e_1-\\frac{1}{2},e_2-\\frac{1}{2},\\cdots,e_n-\\frac{1}{2},0)<br>$$<\/p>\n\n\n\n<p>\u663e\u7136\u8fd9\u6761\u77ed\u5411\u91cf\u7684\u6a21\u4e3a\\(\\frac{\\sqrt{n}}{2}\\)\uff0c\u6211\u4eec\u5f88\u5bb9\u6613\u53ef\u4ee5\u901a\u8fc7LLL\u7b97\u6cd5\u6c42\u89e3\u51fa\u8fd9\u6761\u77ed\u5411\u91cf\uff08\u8fd9\u4e2a\u77ed\u5411\u91cf\u4e00\u822c\u662f\u89c4\u7ea6\u540e\u7684\u683c\u7684\u7b2c\u4e00\u4e2a\u5411\u91cf\uff0c\u4e14\u524d\\(n\\)\u4e2a\u5143\u7d20\u5f80\u5f80\u4e3a\\(\\frac{1}{2}-e_i\\)\uff09\u3002 \u4f7f\u7528sage\u901a\u8fc7CJLOSS\u7b97\u6cd5\u6c42\u89e3\u4f4e\u5bc6\u5ea6\u5b50\u96c6\u548c\u7684\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def CJLOSS(A, s):\n    n = len(A)\n    N = ceil(sqrt(n))\n    L = matrix(QQ, n + 1)\n    for i in range(n):\n        L&#91;i, i&#93; = 1\n        L&#91;n, i&#93; = 1\/2\n        L&#91;i, n&#93; = N * A&#91;i&#93;\n    L&#91;n, n&#93; = N * s\n    res = L.LLL()\n    for v in res:\n        if all(x in &#91;-1\/2, 1\/2&#93; for x in v&#91;:-1&#93;):\n            out = [1\/2 - a for a in v&#91;:-1&#93;]\n            return out<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CJLOSS<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">A<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">s<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    n <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">len<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">A<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    N <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ceil<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">sqrt<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    L <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">matrix<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QQ<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        L<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        L<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #B48EAD\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        L<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> N <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> A<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    L<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">n<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> n<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> N <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> s<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    res <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> L<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">LLL<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> v <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> res<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">all<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">x <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> x <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> v<\/span><span style=\"color: #ECEFF4\">&#91;:<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            out <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #B48EAD\">2<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> a <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> a <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> v<\/span><span style=\"color: #ECEFF4\">&#91;:<\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">&#93;]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> out<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u4f8b\u5982\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u96c6\u5408\\(\\{71, 73, 79, 107, 89, 91\\}\\)\uff0c\u6c42\u51fa\u6ee1\u8db3\u548c\u4e3a\\(269\\)\u7684\u4e00\u4e2a\u5b50\u96c6\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7CJLOSS\u7b97\u6cd5\u8fdb\u884c\u6c42\u89e3\uff08\u8ba1\u7b97\u53ef\u5f97\\(d=\\frac{6}{\\log_2{107}}\\approx0.8900&lt;0.9408\\)\uff09\uff1a <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-11.png\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-11.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"157\" data-original=\"http:\/\/www.triode.cc\/wp-content\/uploads\/2025\/09\/image-11.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-128\"  sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/div><\/a><\/figure>\n<\/div>\n\n\n<p>\u6240\u4ee5\u53ef\u4ee5\u5f97\u5230\u548c\u4e3a\\(269\\)\u7684\u4e00\u4e2a\u5b50\u96c6\u4e3a\\(\\{73,107,89\\}\\).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4f4e\u5bc6\u5ea6\u591a\u91cd\u5b50\u96c6\u548c\u95ee\u9898<\/h4>\n\n\n\n<p>\u901a\u8fc7\u5bf9\u5b50\u96c6\u548c\u95ee\u9898\u7684\u6269\u5c55\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u591a\u91cd\u5b50\u96c6\u548c\u95ee\u9898\uff1a\u7ed9\u5b9a\\(kn\\)\u4e2a\u6b63\u6574\u6570\\(a_{1,1},a_{1,2}\\cdots,a_{k,n}\\)\u4ee5\u53ca\\(k\\)\u4e2a\u6574\u6570\\(s_1,\\cdots,s_k\\)\uff0c\u627e\u5230\\(e_1,e_2,\\cdots,e_n\\in\\{0,1\\}\\)\u6ee1\u8db3\u5bf9\u4efb\u610f\\(j\\in{1,2,\\cdots,k}\\)\uff1a<\/p>\n\n\n\n<p>$$<br>s_j=\\sum_{i=1}^{n}e_ia_{j,i}<br>$$<\/p>\n\n\n\n<p>\u5b9e\u9645\u4e0a\u591a\u91cd\u5b50\u96c6\u548c\u95ee\u9898\u603b\u4f53\u4e0e\u666e\u901a\u5b50\u96c6\u548c\u95ee\u9898\u5dee\u4e0d\u591a\uff0c\u4f46\u662f\u96c6\u5408\u66f4\u591a\uff0c\u6b64\u65f6\u6211\u4eec\u901a\u8fc7\u4e0b\u5f0f\u5bf9\u5bc6\u5ea6\\(d\\)\u8fdb\u884c\u8ba1\u7b97\uff1a<\/p>\n\n\n\n<p>$$<br>d=\\frac{n}{k\\log_2{\\max_{\\begin{matrix}\\end{matrix}}(a_{j,i})}}<br>$$<\/p>\n\n\n\n<p>\u6839\u636e\u6f58\u5f66\u658c\u7b49\u4eba\u7814\u7a76\u53ef\u4ee5\u5f97\u51fa\uff0c\u5f53\\(d&lt;0.9408\\)\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u5982\u4e0b\u683c\u6765\u5c06\u4f4e\u5bc6\u5ea6\u591a\u91cd\u5b50\u96c6\u548c\u95ee\u9898\u8f6c\u6362\u4e3aSVP\u8fdb\u884c\u6c42\u89e3\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} 1&amp;&amp;&amp;&amp;0&amp;Na_{1,1}&amp;Na_{2,1}&amp;\\cdots&amp;Na_{k,1}\\\\ &amp;1&amp;&amp;&amp;0&amp;Na_{1,2}&amp;Na_{2,2}&amp;\\cdots&amp;Na_{k,2}\\\\ &amp;&amp;\\ddots&amp;&amp;\\vdots&amp;\\vdots&amp;\\vdots&amp;\\ddots&amp;\\vdots\\\\ &amp;&amp;&amp;1&amp;0&amp;Na_{1,n}&amp;Na_{2,n}&amp;\\cdots&amp;Na_{k,n}\\\\ \\frac{1}{2}&amp;\\frac{1}{2}&amp;\\cdots&amp;\\frac{1}{2}&amp;\\frac{1}{2}&amp;Ns_1&amp;Ns_2&amp;\\cdots&amp;Ns_k \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\u6574\u6570\\(N&gt;\\sqrt{\\frac{n+1}{4}}\\)\uff0c\u6b64\u65f6\u5728\u8fd9\u4e2a\u683c\u5185\uff0c\u7ebf\u6027\u7ec4\u5408\\((e_1,e_2,\\cdots,e_n,-1)\\)\u4f1a\u751f\u6210\u4e00\u4e2a\u77ed\u5411\u91cf\uff1a<\/p>\n\n\n\n<p>$$<br>(e_1,e_2,\\cdots,e_n,-1)\\pmb{B}=(e_1-\\frac{1}{2},e_2-\\frac{1}{2},\\cdots,e_n-\\frac{1}{2},-\\frac{1}{2},0,\\cdots,0)<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7LLL\u7b97\u6cd5\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u77ed\u5411\u91cf.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4f4e\u5bc6\u5ea6\u6a21\u5b50\u96c6\u548c\u95ee\u9898\u4e0e\u4f4e\u5bc6\u5ea6\u591a\u91cd\u6a21\u5b50\u96c6\u548c\u95ee\u9898<\/h4>\n\n\n\n<p>\u901a\u8fc7\u5bf9\u5b50\u96c6\u548c\u95ee\u9898\u7684\u6269\u5145\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6a21\u5b50\u96c6\u548c\u95ee\u9898\uff1a\u7ed9\u5b9a\\(n\\)\u4e2a\u6a21\\(M\\)\u4e0b\u7684\u6b63\u6574\u6570\\(a_1,a_2,\\cdots,a_n\\)\uff0c\u518d\u7ed9\u51fa\u4e00\u4e2a\u6574\u6570\\(s\\)\uff0c\u627e\u5230\\(e_1,e_2,\\cdots,e_n\\in\\{0,1\\}\\)\uff0c\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>s\\equiv\\sum_{i=1}^{n}e_ia_i\\pmod{M}<br>$$<\/p>\n\n\n\n<p>\u4ece\u800c\u53ef\u4ee5\u63a8\u5e7f\u4e3a\u591a\u91cd\u6a21\u5b50\u96c6\u548c\u95ee\u9898\uff1a\u7ed9\u5b9a\\(kn\\)\u4e2a\u6a21\\(M\\)\u4e0b\u7684\u6b63\u6574\u6570\\(a_{1,1},a_{1,2}\\cdots,a_{k,n}\\)\u4ee5\u53ca\\(k\\)\u4e2a\u6574\u6570\\(s_1,\\cdots,s_k\\)\uff0c\u627e\u5230\\(e_1,e_2,\\cdots,e_n\\in\\{0,1\\}\\)\u6ee1\u8db3\u5bf9\u4efb\u610f\\(j\\in{1,2,\\cdots,k}\\)\uff1a<\/p>\n\n\n\n<p>$$<br>s_j\\equiv\\sum_{i=1}^{n}e_ia_{j,i}\\pmod{M}<br>$$<\/p>\n\n\n\n<p>\u5b9e\u9645\u4e0a\uff0c\u6a21\u5b50\u96c6\u548c\u95ee\u9898\u95ee\u9898\u53ef\u4ee5\u89c6\u4f5c\\(k=1\\)\u7684\u591a\u91cd\u6a21\u5b50\u96c6\u548c\u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5f0f\u5bf9\u591a\u91cd\u6a21\u5b50\u96c6\u548c\u95ee\u9898\u7684\u5bc6\u5ea6\\(d\\)\u8fdb\u884c\u8ba1\u7b97\uff1a<\/p>\n\n\n\n<p>$$<br>d=\\frac{n}{k\\log_2M}<br>$$<\/p>\n\n\n\n<p>\u6839\u636e\u6f58\u5f66\u658c\u7b49\u4eba\u7814\u7a76\u53ef\u4ee5\u5f97\u51fa\uff0c\u5f53\\(d&lt;0.9408\\)\u4e14\\(k=\\omicron\\left(\\frac{n}{\\log_2((n+1)\\sqrt{n}+1)}\\right)\\)\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u5982\u4e0b\u683c\u6765\u5c06\u4f4e\u5bc6\u5ea6\u591a\u91cd\u6a21\u5b50\u96c6\u548c\u95ee\u9898\u8f6c\u6362\u4e3aSVP\u8fdb\u884c\u6c42\u89e3\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} 1&amp;&amp;&amp;&amp;0&amp;Na_{1,1}&amp;Na_{2,1}&amp;\\cdots&amp;Na_{k,1}\\\\ &amp;1&amp;&amp;&amp;0&amp;Na_{1,2}&amp;Na_{2,2}&amp;\\cdots&amp;Na_{k,2}\\\\ &amp;&amp;\\ddots&amp;&amp;\\vdots&amp;\\vdots&amp;\\vdots&amp;\\ddots&amp;\\vdots\\\\ &amp;&amp;&amp;1&amp;0&amp;Na_{1,n}&amp;Na_{2,n}&amp;\\cdots&amp;Na_{k,n}\\\\ &amp;&amp;&amp;&amp;&amp;NM&amp;&amp;&amp;\\\\ &amp;&amp;&amp;&amp;&amp;&amp;NM&amp;&amp;\\\\ &amp;&amp;&amp;&amp;&amp;&amp;&amp;\\ddots&amp;\\\\ &amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;NM\\\\ \\frac{1}{2}&amp;\\frac{1}{2}&amp;\\cdots&amp;\\frac{1}{2}&amp;\\frac{1}{2}&amp;Ns_1&amp;Ns_2&amp;\\cdots&amp;Ns_k \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u4f7f\u7528LLL\u7b97\u6cd5\u8fdb\u884c\u89c4\u7ea6\u5c31\u53ef\u4ee5\u5f97\u5230\u76ee\u6807\u77ed\u5411\u91cf\\((e_1-\\frac{1}{2},e_2-\\frac{1}{2},\\cdots,e_n-\\frac{1}{2},-\\frac{1}{2},0,\\cdots,0)\\).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u9690\u85cf\u6570\u95ee\u9898\uff08Hidden Number Problem\uff0cHNP\uff09<\/h3>\n\n\n\n<p>\u9690\u85cf\u6570\u95ee\u9898\u7684\u5f62\u5f0f\u4e00\u822c\u4e3a\u7ed9\u5b9a\u4e00\u4e2a\u8d28\u6570\\(p\\)\uff0c\u4ee4\\(\\alpha\\in[1,p-1]\\)\u4f5c\u4e3a\u201c\u88ab\u9690\u85cf\u7684\u6570\u5b57\u201d\uff0c\u7ed9\u5b9a\\(m\\)\u4e2a\u6570\u5bf9\\(\\{(t_i,a_i)\\}^{m}_{i=1}\\)\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>\\beta_i-t_i\\alpha+a_i\\equiv0\\pmod{p}<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(|\\beta_i|&lt;K&lt;p\\)\uff0c\u6211\u4eec\u9700\u8981\u4ece\u4e2d\u6062\u590d\u51fa\\(\\alpha\\). \u4e3a\u89e3\u51b3\u8fd9\u7c7b\u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u91cd\u5199\\(\\beta_i-t_i\\alpha+a_i\\equiv0\\pmod{p}\\)\u4e3a\\(\\beta_i+a_i=t_i\\alpha+k_ip\\)\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u6784\u9020\u51fa\u4e0b\u9762\u7684\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} p&amp;&amp;&amp;&amp;\\\\ &amp;p&amp;&amp;&amp;\\\\ &amp;&amp;\\ddots&amp;&amp;\\\\ &amp;&amp;&amp;p&amp;\\\\ t_1&amp;t_2&amp;\\cdots&amp;t_m&amp;\\frac{1}{p} \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u5411\u91cf\\(\\pmb{v}=(k_1,\\cdots,k_m,\\alpha)\\)\u6709\\(\\pmb{v}\\pmb{B}=(\\beta_1+a_1,\\cdots,\\beta_m+a_m,\\alpha\/p)\\)\uff0c\u663e\u7136\u8fd9\u4e2a\u5411\u91cf\u5e76\u4e0d\u662f\u5f88\u77ed\uff0c\u4f46\u662f\u6211\u4eec\u6ce8\u610f\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{v}\\pmb{B}=(a_1,\\cdots,a_m,0)+(\\beta_1,\\cdots,\\beta_m,\\alpha\/p)<br>$$<\/p>\n\n\n\n<p>\u90a3\u4e48\u4ee4\\(\\pmb{t}=(a_1,\\cdots,a_m,0),\\pmb{u}=(\\beta_1,\\cdots,\\beta_m,\\alpha\/p)\\)\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{v}\\pmb{B}-\\pmb{t}=\\pmb{u}<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(||\\pmb{u}||&lt;\\sqrt{m+1}K\\)\uff0c\u663e\u7136\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5c06\u6c42\u89e3HNP\u8f6c\u6362\u4e3a\u6c42\u89e3CVP\uff0c\u901a\u8fc7Kannan\u5d4c\u5165\u6cd5\uff0c\u4ee4\u5d4c\u5165\u56e0\u5b50\u4e3a\\(K\\)\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u4e0b\u9762\u7684\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}&#8217;=\\left(\\begin{matrix} p&amp;&amp;&amp;&amp;&amp;\\\\ &amp;p&amp;&amp;&amp;&amp;\\\\ &amp;&amp;\\ddots&amp;&amp;&amp;\\\\ &amp;&amp;&amp;p&amp;&amp;\\\\ t_1&amp;t_2&amp;\\cdots&amp;t_m&amp;\\frac{K}{p}&amp;\\\\ a_1&amp;a_2&amp;\\cdots&amp;a_m&amp;&amp;K \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u5305\u542b\u5411\u91cf\\(\\pmb{u}&#8217;=(\\beta_1,\\cdots,\\beta_m,K\\alpha\/p,-K)\\)\uff0c\u4e14\\(||\\pmb{u}&#8217;||&lt;\\sqrt{m+2}K\\)\uff0c\\(\\det(\\pmb{B}&#8217;)=p^{m-1}K^2\\)\uff0c\u663e\u7136\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>||\\pmb{u}&#8217;||&lt;\\sqrt{m+2}K&lt;\\left(\\frac{2}{\\sqrt{4\\delta-1}}\\right)^{m+1}\\sqrt{m+2}|\\det(\\pmb{B}&#8217;)|^{1\/(m+2)}<br>$$<\/p>\n\n\n\n<p>\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7LLL\u6765\u627e\u5230\u77ed\u5411\u91cf\\(\\pmb{u}&#8217;\\)\uff0c\u4f46\u662f\u8fd9\u4e2a\u5411\u91cf\u5e76\u4e0d\u662f\u6700\u77ed\u7684\uff0c\u56e0\u4e3a\u683c\u4e0a\u5b58\u5728\u53e6\u4e00\u4e2a\u5411\u91cf\\((0,\\cdots,0,K,0)\\)\uff0c\u5b83\u6bd4\\(\\pmb{u}&#8217;\\)\u66f4\u77ed\uff0c\u6240\u4ee5\\(\\pmb{u}&#8217;\\)\u4e00\u822c\u5728\u89c4\u7ea6\u540e\u7684\u7b2c\u4e8c\u4e2a\u5411\u91cf.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u6269\u5c55\u9690\u85cf\u6570\u95ee\u9898\uff08Extended Hidden Number Problem\uff0cEHNP\uff09<\/h4>\n\n\n\n<p>\u901a\u8fc7\u5bf9\u4e00\u822c\u7684\u9690\u85cf\u6570\u95ee\u9898\u7684\u6269\u5c55\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6269\u5c55\u9690\u85cf\u6570\u95ee\u9898\uff1a\u7ed9\u5b9a\u7d20\u6570\\(p\\)\uff0c\u5bf9\u6574\u6570\\(x\\in[1,p-1]\\)\uff0c\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>x=\\overline{x}+\\sum_{j=1}^{m}2^{\\pi_{j}}x_j<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\\(\\overline{x}\\)\u4ee5\u53ca\\(\\pi_j\\)\u5747\u5df2\u77e5\uff0c\u800c\u672a\u77e5\u6574\u6570\\(x_j\\)\u5bf9\u4e8e\u4e00\u4e2a\u5df2\u77e5\u7684\u6574\u6570\\(\\nu_j\\)\u6ee1\u8db3\\(0\\le x_{j}&lt;2^{\\nu_j}\\)\uff0c\u7ed9\u51fa\\(d\\)\u6761\u65b9\u7a0b\uff1a<\/p>\n\n\n\n<p>$$<br>\\alpha_i\\sum_{j=1}^{m}2^{\\pi_j}x_j+\\sum_{j=1}^{l_i}{\\rho_{i,j}k_{i,j}}\\equiv\\beta_{i}-\\alpha_i\\overline{x}\\pmod{p}<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\u5bf9\u4e8e\\(1\\le i\\le d\\)\uff0c\\(\\alpha_i\\not\\equiv 0\\pmod{p}\\)\uff0c\\(\\rho_{i,j}\\)\u4ee5\u53ca\\(\\beta_i\\)\u5747\u4e3a\u5df2\u77e5\u7684\u6574\u6570\uff0c\u672a\u77e5\u6b63\u6574\u6570\\(k_{i,j}\\)\u7684\u4e0a\u754c\u4e3a\\(2^{\\mu_{i,j}}\\)\u4e14\\(\\mu_{i,j}\\)\u5df2\u77e5\uff0c\u5219\u6269\u5c55\u9690\u85cf\u6570\u95ee\u9898\uff08EHNP\uff09\u5219\u662f\u901a\u8fc7\u4e0a\u8ff0\u6761\u4ef6\u6062\u590d\\(x\\). \u4e3a\u89e3\u51b3EHNP\uff0c\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} p\\pmb{I}_d&amp;&amp;\\\\ \\pmb{A}&amp;\\pmb{X}&amp;\\\\ \\pmb{R}&amp;&amp;\\pmb{K} \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\uff1a<\/p>\n\n\n\n<p>$$<br>\\begin{aligned} &amp;\\pmb{A}=\\left(\\begin{matrix} \\alpha_{1}2^{\\pi_1}&amp;\\alpha_{2}2^{\\pi_1}&amp;\\cdots&amp;\\alpha_{d}2^{\\pi_1}\\\\ \\alpha_{1}2^{\\pi_2}&amp;\\alpha_{2}2^{\\pi_2}&amp;\\cdots&amp;\\alpha_{d}2^{\\pi_2}\\\\ \\vdots&amp;\\vdots&amp;\\ddots&amp;\\vdots\\\\ \\alpha_{1}2^{\\pi_m}&amp;\\alpha_{2}2^{\\pi_m}&amp;\\cdots&amp;\\alpha_{d}2^{\\pi_m}\\\\ \\end{matrix}\\right)\\\\ &amp;\\pmb{X}=diag\\left(\\frac{\\delta}{2^{\\nu_{1}}},\\frac{\\delta}{2^{\\nu_{2}}},\\cdots,\\frac{\\delta}{2^{\\nu_{m}}}\\right)\\\\ &amp;\\pmb{R}=\\left(\\begin{matrix} \\rho_{1,1}&amp;&amp;\\\\ \\rho_{1,2}&amp;&amp;\\\\ \\vdots\\\\ \\rho_{1,l_1}&amp;&amp;\\\\ &amp;\\ddots&amp;\\\\ &amp;&amp;\\rho_{d,1}\\\\ &amp;&amp;\\rho_{d,2}\\\\ &amp;&amp;\\vdots\\\\ &amp;&amp;\\rho_{d,l_{d}} \\end{matrix}\\right)\\\\ &amp;\\pmb{K}=diag\\left(\\frac{\\delta}{2^{\\mu_{1,1}}},\\cdots,\\frac{\\delta}{2^{\\mu_{1,l_{1}}}},\\cdots,\\frac{\\delta}{2^{\\mu_{d,1}}},\\cdots,\\frac{\\delta}{2^{\\mu_{d,l_d}}}\\right) \\end{aligned}<br>$$<\/p>\n\n\n\n<p>\u8bbe\\(L=l_1+l_2+\\cdots+l_d\\)\uff0c\\(D=d+m+L\\)\uff0c\u8ba1\u7b97\uff1a<\/p>\n\n\n\n<p>$$<br>\\kappa_{D}=\\frac{2^{D\/4}(m+L)^{1\/2}+1}{2}<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7\\(\\kappa_{D}\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\\(\\delta\\)\u6ee1\u8db3\\(0&lt;\\delta\\kappa_{D}&lt;1\\)\u3002\u4ee4<\/p>\n\n\n\n<p>$$<br>\\pmb{v}=(\\beta_{1}-\\alpha_{i}\\overline{x},\\cdots,\\beta_{d}-\\alpha_{d}\\overline{x},\\frac{\\delta}{2},\\cdots,\\frac{\\delta}{2})<br>$$<\/p>\n\n\n\n<p>\u6211\u4eec\u9700\u8981\u6839\u636e\u4e0a\u8ff0\u7684\\(\\delta\\)\u6784\u9020\u683c\\(\\mathcal{L}=\\mathcal{L}(\\pmb{B},\\delta)\\)\uff0c\u5728\u683c\\(\\mathcal{L}\\)\u4e2d\u627e\u5230\u5411\u91cf\\(\\pmb{u}\\)\u4f7f\u5f97\uff1a<\/p>\n\n\n\n<p>$$<br>||\\pmb{u}-\\pmb{v}||\\le 2^{\\frac{D}{4}}\\min_{\\pmb{t}\\in\\mathcal{L}}||\\pmb{v}-\\pmb{t}||<br>$$<\/p>\n\n\n\n<p>\u901a\u8fc7LLL\u7b97\u6cd5\u5bf9\u6211\u4eec\u6784\u9020\u7684\u683c\u8fdb\u884c\u89c4\u7ea6\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{u}=\\left(\\beta_{1}-\\alpha_{i}\\overline{x},\\cdots,\\beta_{d}-\\alpha_{d}\\overline{x},\\frac{x_1\\delta}{2^{\\nu_1}} ,\\cdots,\\frac{x_m\\delta}{2^{\\nu_m}},\\frac{k_{1,1}\\delta}{2^{\\mu_{1,1}}},\\cdots,\\frac{k_{1,l_1}\\delta}{2^{\\mu_{1,l_{1}}}},\\cdots,\\frac{k_{d,1}\\delta}{2^{\\mu_{d,1}}},\\cdots,\\frac{k_{d,l_d}\\delta}{2^{\\mu_{d,l_d}}}\\right)<br>$$<\/p>\n\n\n\n<p>\u7136\u540e\u4ee4\\(x_{j}&#8217;=\\frac{1}{\\delta}(\\pmb{u}_{d+j}2^{\\nu_{j}})\\)\uff08\\(1\\le j\\le m\\)\uff09\uff0c\u6700\u540e\u8ba1\u7b97\uff1a<\/p>\n\n\n\n<p>$$<br>x&#8217;=\\overline{x}+\\sum_{j=1}^{m}2^{\\pi_j}x&#8217;_{j}\\mod{p}<br>$$<\/p>\n\n\n\n<p>\u8fd9\u6837\u5f97\u5230\u7684\\(x&#8217;\\)\u5c31\u662f\u6211\u4eec\u9700\u8981\u7684\\(x\\). \u5728\u8bba\u6587<a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-540-74462-7_9\">Extended Hidden Number Problem and Its Cryptanalytic Applications<\/a>\u4e2d\u8fd8\u63d0\u53ca\u4e86\u4e00\u79cd\u901a\u8fc7\u72c4\u5229\u514b\u96f7\u8fd1\u4f3c\u8ba1\u7b97\u53cc\u6d1e\u9690\u85cf\u6570\u95ee\u9898\uff08Hidden Number Problem with Two Holes\uff0c HNP-2H\uff09\uff0c\u5177\u4f53\u65b9\u6cd5\u4e0e\u6b65\u9aa4\u5728<a href=\"https:\/\/triodelzx.github.io\/2024\/11\/30\/%E9%80%9A%E8%BF%87%E7%8B%84%E5%88%A9%E5%85%8B%E9%9B%B7%E8%BF%91%E4%BC%BC%E8%A7%A3%E5%86%B3HNP-2H\/\"><a href=\"http:\/\/www.triode.cc\/index.php\/2024\/11\/30\/dirichlet-approximation-solution-hnp-2h\/\">\u901a\u8fc7\u72c4\u5229\u514b\u96f7\u8fd1\u4f3c\u89e3\u51b3HNP-2H \u2013 \u4e09\u6781\u7ba1\u57df | Triode Field<\/a><\/a>\u6709\u5199.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Coppersmith\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Howgrave-Graham\u5b9a\u7406<\/h4>\n\n\n\n<p>\u8bbe\\(h(x_1,\\cdots,x_n)\\in\\mathbb{Z}[x_1,\\cdots,x_n]\\)\u662f\u4e00\u4e2a\u7531\\(\\omega\\)\u4e2a\u5355\u9879\u5f0f\u7ec4\u6210\u7684\u591a\u9879\u5f0f\uff0c\u5982\u679c\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b58\u5728\\(|r_1|&lt;X_1,\\cdots,|r_n|&lt;X_n\\)\uff0c\u6709\\(f(r_1,\\cdots,r_n)\\equiv0\\pmod{N}\\)<\/li>\n\n\n\n<li>\\(||h(x_1X_1,\\cdots,x_nX_n)||&lt;\\frac{N}{\\sqrt{\\omega}}\\)<\/li>\n<\/ol>\n\n\n\n<p>\u90a3\u4e48\\(f(r_1,\\cdots,r_n)=0\\)\u5728\u6574\u6570\u57df\u540c\u6837\u6210\u7acb.<\/p>\n\n\n\n<p>\u8fd9\u4e2a\u5b9a\u7406\u662fCoppersmith\u65b9\u6cd5\u7684\u5173\u952e\u6240\u5728\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e00\u5143Coppersmith<\/h4>\n\n\n\n<p>\u5bf9\u4e8e\u5ea6\u4e3ak\u7684\u4e00\u5143\u672c\u539f\u591a\u9879\u5f0f\\(p(x)=x^{k}+a_{k-1}x^{k-1}+\\cdots+a_{1}x+a_{0}\\in\\mathbb{Z}[x]\\)\uff0cCoppersmith\u65b9\u6cd5\u53ef\u4ee5\u627e\u5230\u65b9\u7a0b\\(p(x)\\equiv0\\pmod{N}\\)\uff08\u5176\u4e2d\\(N\\)\u662f\u4e00\u4e2a\u5408\u6570\uff09\u7684\u4e00\u4e2a\u5c0f\u6839\\(x\\equiv x_0\\pmod{N}\\)\uff08\\(|x_{0}|&lt;X\\)\uff0c\u5176\u4e2d\\(X\\)\u662f\u4e00\u4e2a\u81ea\u7136\u6570\uff0c\u4e14\\(X\\le N^{1\/k}\\)\uff09 \u8fd9\u4e2a\u7b97\u6cd5\u7684\u4e3b\u8981\u601d\u60f3\u5c31\u662f\u6784\u9020\u4e00\u4e2a\u591a\u9879\u5f0f\\(h(x)\\)\u4f7f\u5f97\\(h(x_0)=0\\)\uff0c\u800c\u6c42\u89e3\\(h(x)=0\\)\u8fd9\u4e2a\u65b9\u7a0b\u662f\u5f88\u7b80\u5355\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5c06\u6c42\u89e3\\(p(x)\\equiv0\\pmod{N}\\)\u8fd9\u4e00\u4efb\u52a1\u8f6c\u5316\u4e3a\u6c42\u89e3\\(h(x)=0\\)\u3002\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} N&amp;&amp;&amp;&amp;&amp;\\\\ &amp;XN&amp;&amp;&amp;&amp;\\\\ &amp;&amp;X^2N&amp;&amp;&amp;\\\\ &amp;&amp;&amp;\\ddots&amp;&amp;\\\\ &amp;&amp;&amp;&amp;X^{k-1}N&amp;\\\\ a_0&amp;a_1X&amp;a_2X^2&amp;\\cdots&amp;a_{d-1}X^{d-1}&amp;X^{d} \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u7136\u540e\u901a\u8fc7LLL\u89c4\u7ea6\u5f97\u5230\u4e00\u4e2a\u77e9\u9635\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}&#8217;=\\left(\\begin{matrix} b_0&amp;b_1&amp;\\cdots&amp;b_{d-1}&amp;b_{d}\\\\ *&amp;*&amp;\\cdots&amp;*&amp;*\\\\ \\vdots&amp;\\vdots&amp;&amp;\\vdots&amp;\\vdots\\\\ *&amp;*&amp;\\cdots&amp;*&amp;* \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5219\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>h(Xx)=b_dx^{d}+b_{d-1}x^{d-1}+\\cdots+b_{1}x+b_0<br>$$<\/p>\n\n\n\n<p>\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>h(x)=\\left(\\frac{b_d}{X^d}\\right)x^{d}+\\left(\\frac{b_{d-1}}{X^{d-1}}\\right)x^{d-1}+\\cdots+\\left(\\frac{b_1}{X}\\right)x+b_0<br>$$<\/p>\n\n\n\n<p>\u89e3\u8be5\u65b9\u7a0b\u5f97\u5230\u7684\u6574\u6570\u89e3\u5c31\u6709\u53ef\u80fd\u662f\u6211\u4eec\u8981\u7684\\(x_0\\)\u3002 \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5229\u7528sage\u7684<code>small_roots<\/code>\u6765\u8fdb\u884c\u6c42\u89e3\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u591a\u5143Coppersmith<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u90a3\u5806\u4e1c\u897f\u6682\u65f6\u6ca1\u770b\u61c2\uff0c\u5148\u8d34\u4e2a\u4ece\u67d0\u4e9b\u5730\u65b9\u641c\u522e\u6765\u7684\u677f\u5b50<\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def small_roots(f, bounds, m=1, d=None):\n\timport itertools\n    if not d:\n        d = f.degree()\n    R = f.base_ring()\n    N = R.cardinality()\n    f \/= f.coefficients().pop(0)\n    f = f.change_ring(ZZ)\n    G = Sequence([], f.parent())\n    for i in range(m + 1):\n        base = N ^ (m - i) * f ^ i\n        for shifts in itertools.product(range(d), repeat=f.nvariables()):\n            g = base * prod(map(power, f.variables(), shifts))\n            G.append(g)\n    B, monomials = G.coefficients_monomials()\n    monomials = vector(monomials)\n    factors = &#91;monomial(*bounds) for monomial in monomials&#93;\n    for i, factor in enumerate(factors):\n        B.rescale_col(i, factor)\n    B = B.dense_matrix().LLL() # \u53ef\u4ee5\u5c06LLL\u6362\u6210flatter\u52a0\u901f\n    B = B.change_ring(QQ)\n    for i, factor in enumerate(factors):\n        B.rescale_col(i, 1 \/ factor)\n    H = Sequence([], f.parent().change_ring(QQ))\n    for h in filter(None, B * monomials):\n        H.append(h)\n        I = H.ideal()\n        if I.dimension() == -1:\n            H.pop()\n        elif I.dimension() == 0:\n            roots = []\n            for root in I.variety(ring=ZZ):\n                root = tuple(R(root&#91;var&#93;) for var in f.variables())\n                roots.append(root)\n            return roots\n    return []<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">small_roots<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">f<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">bounds<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">m<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">d<\/span><span style=\"color: #81A1C1\">=None<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\t<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> itertools<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">not<\/span><span style=\"color: #D8DEE9FF\"> d<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        d <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">degree<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    R <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">base_ring<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    N <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> R<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">cardinality<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    f <\/span><span style=\"color: #81A1C1\">\/=<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">coefficients<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">pop<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    f <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">change_ring<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    G <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Sequence<\/span><span style=\"color: #ECEFF4\">([],<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">parent<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">m <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        base <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> N <\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">m <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> f <\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> shifts <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> itertools<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">product<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">range<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">d<\/span><span style=\"color: #ECEFF4\">),<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">repeat<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">nvariables<\/span><span style=\"color: #ECEFF4\">()):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            g <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> base <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">prod<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">map<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">power<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">variables<\/span><span style=\"color: #ECEFF4\">(),<\/span><span style=\"color: #D8DEE9FF\"> shifts<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            G<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">g<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> monomials <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> G<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">coefficients_monomials<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    monomials <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">vector<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">monomials<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    factors <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #88C0D0\">monomial<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">bounds<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> monomial <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> monomials<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> factor <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">enumerate<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">factors<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        B<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">rescale_col<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> factor<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> B<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">dense_matrix<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">LLL<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\"># \u53ef\u4ee5\u5c06LLL\u6362\u6210flatter\u52a0\u901f<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    B <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> B<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">change_ring<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QQ<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> factor <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">enumerate<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">factors<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        B<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">rescale_col<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">i<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\"> factor<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    H <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Sequence<\/span><span style=\"color: #ECEFF4\">([],<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">parent<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">change_ring<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">QQ<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> h <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">filter<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">None<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> B <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> monomials<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        H<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">h<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        I <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> H<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ideal<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> I<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">dimension<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            H<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">pop<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #D8DEE9FF\"> I<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">dimension<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            roots <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> root <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> I<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">variety<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ring<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">ZZ<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                root <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">tuple<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">R<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">root<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">var<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> var <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> f<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">variables<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                roots<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">append<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">root<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> roots<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[]<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e00\u822c\u7ef4\u7eb3\u653b\u51fb\u7684\u683c\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>\u7ef4\u7eb3\u65b9\u6cd5<\/strong>\uff1a\u5bf9\u4e8e\\(N=pq\\)\uff0c\u5047\u8bbe\\(\\lambda({N})\\)\u4e0e\\(e\\)\u5747\u4e0e\\(N\\)\u63a5\u8fd1\uff0c\u800c\u4e14\u89e3\u5bc6\u6307\u6570\\(d&lt;N^{1\/4}\\)\uff0c\u90a3\u4e48\u56e0\u4e3a\\(e\\)\u4e0e\\(d\\)\u6ee1\u8db3\\(ed-k\\lambda(N)=1\\)\uff0c\u6240\u4ee5\u4ee4\\(\\lambda(N)=(p-1)(q-1)\/g\\)\uff0c\u53c8\u4ee4\\(s=1-p-q\\)\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>$$<br>edg-kN=g+ks<br>$$<\/p>\n\n\n\n<p>\u90a3\u4e48\u6709\uff1a<\/p>\n\n\n\n<p>$$<br>\\frac{e}{N}-\\frac{k}{dg}=\\frac{ks}{dgN}+\\frac{1}{dN}<br>$$<\/p>\n\n\n\n<p>\u7531\u4e8e\\(e\\approx N\\)\uff0c\\(|s|\\approx N^{1\/2}\\)\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\\(\\frac{k}{dg}\\approx1\\)\uff0c\u6240\u4ee5\u4e0a\u8ff0\u65b9\u7a0b\u7684\u503c\u7ea6\u7b49\u4e8e\\(N^{-1\/2}\\)\uff0c\u7531\u52d2\u8ba9\u5fb7\u5b9a\u7406\uff0c\u5982\u679c\\(N^{-1\/2}&lt;1\/[2(dg)^2]\\)\uff0c\u90a3\u4e48\\(\\frac{k}{dg}\\)\u4f1a\u662f\\(e\/N\\)\u7684\u6e10\u8fdb\u5206\u6570\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fde\u5206\u6570\u6765\u5f97\u5230\\(d\\)\uff0c\u6216\u8005\u5206\u89e3\u51fa\\(p,q\\)\uff0c\u4e0a\u8ff0\u8ba8\u8bba\u4e2d\u4e00\u822c\u60c5\u51b5\u4e0b\\(g=1\\)\u3002 \u4ee4\\(g=1\\)\uff0c\u5b9e\u9645\u4e0a\u6b64\u65f6\\(\\lambda(N)=\\varphi(N)\\)\uff0c\u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5728\u4e0a\u8ff0\u6761\u4ef6\u4e0b\u5f97\u5230\u7684\\(ed-kN=1+ks\\)\u4e00\u5f0f\u5b58\u5728\u7ebf\u6027\u5173\u7cfb\uff0c\u6240\u4ee5\u53ef\u4ee5\u8003\u8651\u4f7f\u7528\u683c\u6765\u6c42\u89e3\uff0c\u8003\u8651\u6784\u9020\u5982\u4e0b\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}=\\left(\\begin{matrix} 1&amp;e\\\\ 0&amp;-N \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\u5176\u4e2d\u76ee\u6807\u5411\u91cf\u4e3a\\(\\pmb{v}=(d,1+ks)\\)\uff0c\u5176\u4e2d\\(s=1-p-q\\)\uff0c\u53ef\u4ee5\u77e5\u9053\\(|s|\\approx N^{1\/2}\\)\uff0c\\(d&lt;N^{1\/4}\\)\uff0c\u5219\u6709\\(|\\det(\\pmb{B})|=N\\)\uff0c\u53ef\u4ee5\u77e5\u9053<\/p>\n\n\n\n<p>$$<br>||\\pmb{v}||=\\sqrt{d^2+(1+ks)^2}&gt;\\sqrt{2}N^{1\/2}&gt;\\sqrt{2}|\\det(\\pmb{B})|^{1\/2}<br>$$<\/p>\n\n\n\n<p>\u663e\u7136\uff0c\u901a\u8fc7\u95f5\u53ef\u592b\u65af\u57fa\u7b2c\u4e00\u5b9a\u7406\uff0c\u6211\u4eec\u51e0\u4e4e\u4e0d\u53ef\u80fd\u901a\u8fc7\u89c4\u7ea6\u5f97\u5230\u6211\u4eec\u7684\u76ee\u6807\u5411\u91cf\uff0c\u90a3\u4e48\u6211\u4eec\u8981\u8fdb\u884c\u683c\u57fa\u914d\u5e73\uff0c\u6839\u636e\u5206\u6790\uff0c\u6211\u4eec\u6784\u9020\u5982\u4e0b\u683c\uff1a<\/p>\n\n\n\n<p>$$<br>\\pmb{B}&#8217;=\\left(\\begin{matrix} 2^{\\alpha}&amp;e\\\\ 0&amp;-N \\end{matrix}\\right)<br>$$<\/p>\n\n\n\n<p>\uff08\u5176\u4e2d\\(\\alpha\\)\u662f\\(N\\)\u7684\u6bd4\u7279\u6570\u7684\\(1\/2\\)\uff09\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u901a\u8fc7LLL\u7b97\u6cd5\u89c4\u7ea6\u5f97\u5230\u76ee\u6807\u5411\u91cf(\\(2^{\\alpha}d,1+ks)\\).<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u683c\u5bc6\u7801\u76f8\u5173\u7684\u4e00\u4e9b\u6bd4\u8f83\u7b80\u5355\u7684\u4e1c\u897f\uff0c\u4f1a\u7684\u4e0d\u591a\uff0c\u968f\u4fbf\u5199\u5199<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[7,10],"class_list":["post-121","post","type-post","status-publish","format-standard","hentry","category-3","tag-crypto","tag-10"],"_links":{"self":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/comments?post=121"}],"version-history":[{"count":7,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/121\/revisions"}],"predecessor-version":[{"id":190,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/posts\/121\/revisions\/190"}],"wp:attachment":[{"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/media?parent=121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/categories?post=121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.triode.cc\/index.php\/wp-json\/wp\/v2\/tags?post=121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}