LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
exact_factorization.hpp
浏览该文件的文档.
1
#pragma once
2
3
#include "
polynomial.hpp
"
4
#include "
modular_arithmetic.hpp
"
5
#include "
bigint.hpp
"
6
#include "
rational.hpp
"
7
#include "
result.hpp
"
8
#include "
computation_context.hpp
"
9
#include <cstdint>
10
#include <vector>
11
12
namespace
LMCAS
{
13
14
/** @brief Berlekamp 分解结果。 */
15
struct
BerlekampResult
{
16
int64_t
prime
;
/**< 使用的素数。 */
17
std::vector<Polynomial<ModInt>>
factors
;
/**< 模 p 下的不可约因子。 */
18
int
null_space_dim
;
/**< 零空间维度,等于不可约因子数。 */
19
std::vector<std::vector<int64_t>>
null_space_basis
;
/**< 零空间基向量。 */
20
21
BerlekampResult
() :
prime
(-1),
null_space_dim
(0) {}
22
};
23
24
/**
25
* @brief Berlekamp 模素数分解(内部接口).
26
*
27
* 在有限域 F_p 上对有理系数多项式执行 Berlekamp 算法,
28
* 返回模 p 下的不可约因子列表.
29
*
30
* @param[in] poly 有理系数多项式
31
* @param[in] prime 选定的素数 p
32
* @return Berlekamp 分解结果
33
*
34
* @internal
35
*/
36
LMCAS_API
BerlekampResult
berlekamp_factor
(
37
const
Polynomial<Rational>& poly,
38
int64_t
prime
);
39
40
using
HenselLiftResult
=
Result<std::vector<Polynomial<BigInt>
>>;
41
42
/**
43
* @brief 执行 Hensel 提升并诊断前置条件。
44
* 空因子列表、非法素数、零或常数输入、零因子及模 p 因子乘积
45
* 与原多项式不符时,通过 CasError 返回具体诊断。
46
*/
47
LMCAS_API
HenselLiftResult
hensel_lift_checked
(
48
const
Polynomial<BigInt>
& poly,
49
const
std::vector<
Polynomial<ModInt>
>&
mod_factors
,
50
int64_t
prime
,
51
int
lift_bound
);
52
53
using
ZassenhausResult
=
54
Result<MathResult<std::vector<Polynomial<Rational>
>>>;
55
56
/**
57
* @brief 在计算预算内执行精确 Zassenhaus 因子组合。
58
* 要求重构模数为正,且提升因子乘积与 @p poly 的整数归一化结果同余。
59
* 候选子集按字典序枚举,支持任意因子数;预算耗尽时以 Inconclusive 返回精确部分分解。
60
*/
61
LMCAS_API
ZassenhausResult
zassenhaus_combine_checked
(
62
const
Polynomial<Rational>
& poly,
63
const
std::vector<
Polynomial<BigInt>
>&
lifted_factors
,
64
const
BigInt&
reconstruction_modulus
,
65
ComputationContext
&
context
);
66
67
LMCAS_API
ZassenhausResult
zassenhaus_combine_checked
(
68
const
Polynomial<Rational>
& poly,
69
const
std::vector<
Polynomial<BigInt>
>&
lifted_factors
,
70
const
BigInt&
reconstruction_modulus
);
71
72
/**
73
* @brief 二因子二次 Hensel 提升的状态结构.
74
*
75
* 存储一对因子 g, h 及其 Bezout 系数 s, t,满足:
76
* - f == g * h (mod modulus)
77
* - s * g + t * h == 1 (mod modulus)
78
*
79
* 系数按升幂存储:coeffs[i] 对应 x^i 的系数.
80
*/
81
struct
HenselLiftPair
{
82
std::vector<BigInt>
g
;
/**< 第一个因子的系数。 */
83
std::vector<BigInt>
h
;
/**< 第二个因子的系数。 */
84
std::vector<BigInt>
s
;
/**< g 的 Bezout 系数。 */
85
std::vector<BigInt>
t
;
/**< h 的 Bezout 系数。 */
86
BigInt
modulus
;
/**< 当前模数。 */
87
};
88
89
/**
90
* @brief 执行一步二次 Hensel 提升:mod m -> mod m^2.
91
*
92
* 给定 f == g*h (mod m) 且 s*g + t*h == 1 (mod m),
93
* 计算 g', h', s', t' 使得 f == g'*h' (mod m^2) 且 s'*g' + t'*h' == 1 (mod m^2).
94
*
95
* @param[in] f 原始多项式系数向量(升幂排列)
96
* @param[in] current 当前提升状态(g, h, s, t, modulus=m)
97
* @return 提升后的状态(g', h', s', t', modulus=m^2)
98
*
99
* @pre f == g*h (mod m)
100
* @pre s*g + t*h == 1 (mod m)
101
* @pre deg(s) < deg(h), deg(t) < deg(g)
102
*
103
* @see Zassenhaus, H. "On Hensel factorization, I."
104
* Journal of Number Theory, 1(3), 1969.
105
*/
106
LMCAS_API
HenselLiftPair
hl_two_factor_lift
(
107
const
std::vector<BigInt>& f,
108
const
HenselLiftPair
& current);
109
110
/** @brief 无平方因子预处理结果。 */
111
struct
TfSquareFreeResult
{
112
Polynomial<Rational>
square_free
;
/**< 无平方因子部分。 */
113
Polynomial<Rational>
repeated_factor
;
/**< 重复因子 gcd(f, f')。 */
114
bool
had_repeated_factors
;
/**< 是否存在重复因子。 */
115
116
TfSquareFreeResult
() :
square_free
(
"x"
),
repeated_factor
(
"x"
),
had_repeated_factors
(false) {}
117
};
118
119
/**
120
* @brief 计算多项式的无平方因子部分.
121
*
122
* 以 gcd(f, f') 分离重复因子,为 Berlekamp 分解提供无平方因子部分。
123
*
124
* @param[in] poly 输入的有理系数多项式
125
* @return 无平方因子预处理结果,包含 square-free 部分和重复因子信息
126
*
127
* @internal
128
*/
129
LMCAS_API
TfSquareFreeResult
tf_square_free
(
const
Polynomial<Rational>& poly);
130
131
}
bigint.hpp
任意精度整数 BigInt,底层调用 LMMP 实现高性能大数运算。
LMCAS::ComputationContext
定义
computation_context.hpp:99
LMCAS::Polynomial
一元多项式模板类
定义
polynomial.hpp:52
LMCAS::Result
定义
result.hpp:39
computation_context.hpp
LMCAS_API
#define LMCAS_API
定义
lmcas_export.hpp:13
modular_arithmetic.hpp
模运算工具:ModInt 类、扩展欧几里得、CRT、有理重构。
LMCAS
定义
assumption.hpp:11
LMCAS::tf_square_free
TfSquareFreeResult tf_square_free(const Polynomial< Rational > &poly)
计算多项式的无平方因子部分,用于 Berlekamp 模分解预处理。
定义
rational_square_free.cpp:67
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
LMCAS::HenselLiftPair::g
std::vector< BigInt > g
第一个因子的系数。
定义
exact_factorization.hpp:82
LMCAS::hensel_lift_checked
HenselLiftResult hensel_lift_checked(const Polynomial< BigInt > &poly, const std::vector< Polynomial< ModInt > > &mod_factors, int64_t prime, int lift_bound)
Hensel 提升:将模 p 因子提升到 mod p^k.
定义
hensel_lift.cpp:695
LMCAS::berlekamp_factor
BerlekampResult berlekamp_factor(const Polynomial< Rational > &poly, int64_t prime)
定义
berlekamp.cpp:31
LMCAS::reconstruction_modulus
const std::vector< Polynomial< BigInt > > const BigInt & reconstruction_modulus
定义
exact_factorization.hpp:64
LMCAS::HenselLiftResult
Result< std::vector< Polynomial< BigInt > > > HenselLiftResult
定义
exact_factorization.hpp:40
LMCAS::lifted_factors
const std::vector< Polynomial< BigInt > > & lifted_factors
定义
exact_factorization.hpp:63
LMCAS::hl_two_factor_lift
HenselLiftPair hl_two_factor_lift(const std::vector< BigInt > &f, const HenselLiftPair ¤t)
执行一步二次 Hensel 提升:mod m -> mod m^2.
定义
hensel_lift.cpp:450
LMCAS::HenselLiftPair::t
std::vector< BigInt > t
h 的 Bezout 系数。
定义
exact_factorization.hpp:85
LMCAS::mod_factors
const std::vector< Polynomial< ModInt > > & mod_factors
定义
exact_factorization.hpp:49
LMCAS::HenselLiftPair::modulus
BigInt modulus
当前模数。
定义
exact_factorization.hpp:86
LMCAS::HenselLiftPair::h
std::vector< BigInt > h
第二个因子的系数。
定义
exact_factorization.hpp:83
LMCAS::prime
int64_t prime
定义
exact_factorization.hpp:38
LMCAS::HenselLiftPair::s
std::vector< BigInt > s
g 的 Bezout 系数。
定义
exact_factorization.hpp:84
LMCAS::ZassenhausResult
Result< MathResult< std::vector< Polynomial< Rational > > > > ZassenhausResult
定义
exact_factorization.hpp:53
LMCAS::zassenhaus_combine_checked
ZassenhausResult zassenhaus_combine_checked(const Polynomial< Rational > &poly, const std::vector< Polynomial< BigInt > > &lifted_factors, const BigInt &reconstruction_modulus, ComputationContext &context)
定义
zassenhaus_combine.cpp:455
LMCAS::lift_bound
const std::vector< Polynomial< ModInt > > int64_t int lift_bound
定义
exact_factorization.hpp:51
LMCAS::HenselLiftPair
二因子二次 Hensel 提升的状态结构.
定义
exact_factorization.hpp:81
polynomial.hpp
一元多项式模板类 Polynomial<T>,支持四则运算,GCD,求导,求值.
rational.hpp
精确有理数 Rational,基于 BigInt 分子/分母表示,自动约分。
result.hpp
LMCAS::BerlekampResult::null_space_dim
int null_space_dim
零空间维度,等于不可约因子数。
定义
exact_factorization.hpp:18
LMCAS::BerlekampResult::null_space_basis
std::vector< std::vector< int64_t > > null_space_basis
零空间基向量。
定义
exact_factorization.hpp:19
LMCAS::BerlekampResult::factors
std::vector< Polynomial< ModInt > > factors
模 p 下的不可约因子。
定义
exact_factorization.hpp:17
LMCAS::BerlekampResult::prime
int64_t prime
使用的素数。
定义
exact_factorization.hpp:16
LMCAS::BerlekampResult::BerlekampResult
BerlekampResult()
定义
exact_factorization.hpp:21
LMCAS::TfSquareFreeResult::square_free
Polynomial< Rational > square_free
无平方因子部分。
定义
exact_factorization.hpp:112
LMCAS::TfSquareFreeResult::repeated_factor
Polynomial< Rational > repeated_factor
重复因子 gcd(f, f')。
定义
exact_factorization.hpp:113
LMCAS::TfSquareFreeResult::had_repeated_factors
bool had_repeated_factors
是否存在重复因子。
定义
exact_factorization.hpp:114
LMCAS::TfSquareFreeResult::TfSquareFreeResult
TfSquareFreeResult()
定义
exact_factorization.hpp:116
include
exact_factorization.hpp
生成于
, 为 LMCAS使用
1.18.0