草庐IT

【数论与组合数学 3】Hensel 引理、原根

My Blog 2023-03-28 原文

Hensel 引理、原根

一、Hensel 引理

  1. Hensel 引理:\(\mathsf{f(x)}\) 是一个整系数多项式 \(\mathsf{(\ f(x) \in Z(x)\ )}\),对于素数 p,整数 a 使得 \(\mathsf{p^{k} \mid f(a)}\)\(\mathsf{(\ f^{'}(a),p\ )=1}\),即 \(\mathsf{f(a)\equiv 0\ mod\ p^{k},f^{'}(a) \neq 0\ mod\ p}\) 。则在模 p 意义下恰有一个整数 t 使得 \(\mathsf{f(a+tp^{k}) \equiv 0\ (mod\ p^{k+1})}\) 。也就是在模 \(\mathsf{p^{k+1}}\) 的意义下有唯一一个解 \(\mathsf{b \equiv a\ (mod\ p^{k})}\)
  • 证明:

    想找的解 \(\mathsf{b=a+tp^{k},t \in \{0,\ 1,\ \cdots,\ p-1 \}}\) 在模 \(\mathsf{p^{k+1}}\) 下。

    为了验证一个 t 是否满足要求,我们以 a 使用 Taylor 展开式,

    \(\mathsf{f(a+tp^{k}) \equiv f(a)+tp^{k}f^{'}(a)+ \frac{(tp^{k})^{2}}{2!}f^{''}(a)+ \cdots + \frac{(tp^{k})^{n}}{n!}f^{n}(a)}\)

    因为 f 是整系数多项式,所以 \(\mathsf{\frac{f^{n}}{n!} \in Z}\)

    \(\mathsf{p^{nk} \equiv 0\ (mod\ p^{k+1})(k \geq 1)}\),所以 \(\mathsf{f(a+tp^{k}) \equiv f(a) + tp^{k}f^{'}(a)\ (mod\ p^{k+1})\ (k \geq 1)}\)

    注意到 \(\mathsf{p^{k} \mid\mid f(a),p^{k} \mid\mid tp^{k}f^{'}(a)}\),故模 p 下只有一个 t 满足 \(\mathsf{f(a+tp^{k}) \equiv 0\ (mod\ p^{k+1})}\)

  • 例子:

    使用 Hensel 引理找到 \(\mathsf{x^{3}-2x \equiv 1(mod\ 125)}\) 的一个解

    \(\mathsf{f(x)=x^{3}-2x-1}\) ,需找到 \(\mathsf{f(x) \equiv 0\ (mod\ 5)}\)

    \(\mathsf{f(0) = -1 \equiv 4\ (mod\ 5)}\)

    \(\mathsf{f(1) = -2 \equiv 3\ (mod\ 5)}\)

    \(\mathsf{f(2)} = 3 \equiv 3\ (mod\ 5)\)

    \(\mathsf{f(3) = 20 \equiv 0\ (mod\ 5)}\)

    \(\mathsf{f(4) = 55 \equiv 0\ (mod\ 5)}\)

    所以,\(\mathsf{a_{1}=3,4}\)\(\mathsf{f(x) \equiv 0\ (mod\ 5)}\) 的所有解

    计算 f 的所有导数:\(\mathsf{f^{'}(x)=3x^{2}-2}\)

    \(\mathsf{f^{'}(3) = 27-2 = 25 \equiv 0\ (mod\ 5)}\)

    \(\mathsf{f^{'}(4)=48-2=46 \equiv 1\ (mod\ 5)}\)

    \(\mathsf{(f^{'}(4))^{-1}\equiv 1\ (mod\ 5)}\) 所以:

    \(\mathsf{a_{2}\equiv 4-f(4)[f^{'}(4)]^{-1}(mod\ 25) \equiv 4-55 \times 1\ (mod\ 25) \equiv -51\ (mod\ 25) \equiv 24\ (mod\ 25)}\)

    \(\mathsf{a_3 \equiv 24-f(24)[f^{'}(24)]^{-1}(mod\ 125)\equiv 24-13775 \times 1\ (mod\ 125)\equiv -13751\ (mod\ 125)\equiv -1\ (mod\ 125)\equiv 124\ (mod\ 125)}\)

    所以,\(\mathsf{x=124}\)\(\mathsf{x^{3}-2x \equiv 1\ (mod\ 125)}\) 的解。

二、模多项式

  1. 定理:度为 n (多项式的最高次数) 的同余模多项式 \(\mathsf{f(x)\equiv 0\ mod\ p}\) (p 为素数) 至多有 n 个解。
  • 证明:

    上述定理一定适用于度为 0 或 1 的情况。假设它适用于度 \(\mathsf{< n\ (n \geq 2)}\) 的情况。

    如果它没有根,那么结束。否则,假设它有一个根 \(\mathsf{\alpha}\)

    \(\mathsf{f(x)}\) 除以 \(\mathsf{x-\alpha}\) ,会获得 \(\mathsf{g(x) \in Z[x]}\) 和一个常数 r 使得 \(\mathsf{f(x)=g(x)(x-\alpha)+r}\)

    如果带入 \(\mathsf{\alpha}\) 获得 \(\mathsf{f(\alpha)=(\alpha-\alpha)g(\alpha)+r=r}\)

    这意味着 \(\mathsf{f(\alpha)=r}\)\(\mathsf{f(x)=(x-\alpha)g(\alpha)+f(\alpha)}\)

    已知 \(\mathsf{f(\alpha)\ mod\ p =0}\),如果 \(\mathsf{\beta}\)\(\mathsf{f(x)}\) 的任何其他根,那么将 \(\mathsf{\beta}\) 带入带入方程,得到:

    \(\mathsf{f(\beta)=(\beta-\alpha)g(\beta)+f(\alpha)\ mod\ p}\)

    \(\mathsf{f(\beta) \equiv (\beta-\alpha)g(\beta)\ mod\ p}\)

    所以 \(\mathsf{(\beta-\alpha)g(\beta) \equiv 0\ mod\ p}\) ,我们还假设 \(\mathsf{\beta \neq \alpha}\) ,所以 \(\mathsf{g(\beta) \equiv 0\ mod\ p}\)

    所以 \(\mathsf{\beta}\)\(\mathsf{g(x)}\) 的一个根,作为 \(\mathsf{g(x) \equiv 0\ mod\ p}\) 的一个解

    可知 \(\mathsf{g(x)}\) 的度为 \(\mathsf{n-1}\) ,所以通过归纳假设 \(\mathsf{g(x) \equiv 0\ mod\ p}\) 有最多 \(\mathsf{n-1}\) 个解

    所以,如果包含\(\mathsf{\alpha}\)\(\mathsf{f(x)}\) 至多有 n 个解。

  1. 推论:如果 \(\mathsf{a_{n}x^{n}+a_{n-1}x^{n-1}+ \cdots +a_{0} \equiv 0\ mod\ p}\) 的解超过 n 个,那么所有的 \(\mathsf{a_{i} \equiv 0\ mod\ p}\)

  2. 定理:令 \(\mathsf{f(x)=x^{n}+a_{n-1}x^{n-1}+ \cdots + a_{0}}\)\(\mathsf{f(x)\equiv 0\ mod\ p}\) 正好有 n 个不同的解当且仅当 \(\mathsf{f(x)}\) 除以 \(\mathsf{x^{p}-x\ mod\ p}\) ,即存在 \(\mathsf{g(x) \in Z[x]}\) 作为多项式,使得 \(\mathsf{f(x)g(x) = x^{p}-x\ mod\ p}\)

  • 证明:

    部分1:

    假设 \(\mathsf{f(x)}\) 有 n 个解。那么 \(\mathsf{n \leq p}\) 因为在模 p 情况下只有 p 个可能的根。

    \(\mathsf{x^{p}-x}\) 除以 \(\mathsf{f(x)}\) 获得 \(\mathsf{x^{p}-x=f(x)g(x)+r(x),deg(r)<deg(f)=n}\)

    如果 \(\mathsf{\alpha}\)\(\mathsf{f(x)}\) 在模 p 情况下的根,带入 \(\mathsf{\alpha}\) 可得:\(\mathsf{\alpha^{p}-\alpha=f(\alpha)g(\alpha)+r(\alpha) \equiv 0}\)

    所以,\(\mathsf{\alpha}\) 一定是 \(\mathsf{r(x) \equiv 0\ mod\ p}\) 的一个解

    由于 \(\mathsf{f(x)}\) 有不同的根,\(\mathsf{r(x)\equiv 0\ mod\ p}\) 有 n 个不同的解

    但是 \(\mathsf{deg(r)<n}\) ,所以 \(\mathsf{x^{p}-x=f(x)g(x)\ mod\ p}\) 并且 \(\mathsf{f(x)}\) 除以 \(\mathsf{x^{p}-x}\)

    部分2:

    假设 \(\mathsf{f(x) \mid x^{p}-x\ mod\ p}\)

    式子 \(\mathsf{x^{p}-x \equiv f(x)g(x)\ mod\ p}\) 其中 \(\mathsf{f(x)}\) 是度为 n 的,\(\mathsf{g(x)}\) 是度为 \(\mathsf{p-n}\) 的。

    需要证明 \(\mathsf{f(x)}\) 有 n 个不同的解。

    通过之前的定理,\(\mathsf{g(x)}\) 在模 p 下有至多 \(\mathsf{p-n}\) 个根。

    如果 \(\mathsf{\alpha \in \{0,\ 1,\ \cdots,\ p-1 \}}\) 不是模 p 下 \(\mathsf{g(x)}\) 的根,那么 \(\mathsf{\alpha^{p}-\alpha \equiv f(\alpha)g(\alpha)\ mod\ p \equiv 0(Fermat)}\)

    由于 \(\mathsf{g(\alpha) \neq 0\ mod\ p}\)\(\mathsf{f(\alpha)\equiv 0\ mod\ p}\)

    因此,由于至少有 \(\mathsf{p-(p-n)}\)\(\mathsf{\alpha}\) ,可知 \(\mathsf{f(x)}\) 在模 p 下至少有 n 个不同的根。

    根据该理论,\(\mathsf{f(x)}\) 在模 p 下至多有 n 个根 \(\mathsf{\ \Rightarrow\ f(x)}\) 在模 p 下正好有 n 个不同的根。

  1. 推论:如果 \(\mathsf{d \mid p-1}\) 那么 \(\mathsf{x^{d} \equiv 1\ mod\ p}\) 在模 p 下恰好有 d 个不同的解
  • 例子:

    \(\mathsf{x^{3} \equiv 1\ mod\ 7,\qquad x^{3} \equiv 1\ mod\ 5}\)

  • 证明:

    \(\mathsf{d \mid p-1}\) ,所以 \(\mathsf{x^{d}-1 \mid x^{p-1}-1}\) 作为多项式

    \(\mathsf{p-1=kd}\) ,所以 \(\mathsf{x^{kd}-1=(x^{d}-1)(x^{(k-1)d}+\cdots +1)}\)

    所以,\(\mathsf{x^{d}-1 \mid x(x^{p-1}-1)=x^{p}-x}\) ,故有 d 个解。

三、元素的阶

  1. 定义 (阶):如果 \(\mathsf{gcd(a,m)=1}\) 且 h 是最小的正整数使得 \(\mathsf{a^{h} \equiv 1\ mod\ m}\) ,那么说 h 是模 m 下 a 的阶。记为:\(\mathsf{h=ord_{m}(a)}\)
  • 例子:

    \(\mathsf{ord_{7}(2)=3 \qquad ord_{11}(2)=10 \qquad ord_{11}(5)=5}\)

  1. 引理:令 \(\mathsf{h=ord_{m}(a)}\) ,整数 k 的集合,使得 \(\mathsf{a^{k}\equiv 1\ mod\ m}\) 恰好是 h 的倍数的集合。
  • 例子:

    \(\mathsf{ord_{11}(5)=5}\) ,如果 \(\mathsf{5^{k}\equiv 1\ mod\ 11}\) ,那么 \(\mathsf{k=5,10}\)

  • 证明:

    \(\mathsf{a^{rh}\equiv (a^{h})^{r}\equiv 1^{r}\equiv 1\ mod\ m}\)

    假设有一个 k 满足\(\mathsf{a^{k}\equiv 1\ mod\ m}\)

    \(\mathsf{k=hq+r}\) 其中 \(\mathsf{0 \leq r<h}\)

    \(\mathsf{1\equiv a^{k}=a^{hq+r}=a^{hq}a^{r}\equiv 1a^{r}\ mod\ m \equiv a^{r}\ mod\ m}\)

    所以,\(\mathsf{a^{r} \equiv 1\ mod\ m}\) ,但是 \(\mathsf{r<h}\) ,所以 \(\mathsf{r=0}\) 并且 k 是 h 的倍数,即 \(\mathsf{h \mid k}\)

  1. 引理:如果 \(\mathsf{h=ord_{m}(a)}\) 那么 \(\mathsf{a^{k}}\) 在模 m 下的阶是 \(\mathsf{\frac{h}{gcd(k,h)}}\)
  • 例子:

    \(\mathsf{ord_{11}(5)=5 \qquad ord_{11}(2)=10}\)

    \(\mathsf{5^{3} \equiv 4}\) 的阶 \(\mathsf{\frac{5}{gcd(3,5)}=5\ mod\ 11}\)

    \(\mathsf{2^{8} \equiv 3}\) 的阶 \(\mathsf{\frac{10}{gcd(8,10)}=5\ mod\ 11}\)

  • 证明:

    \(\mathsf{a^{kj} \equiv 1\ mod\ m \iff h \mid kj \iff \frac{h}{gdc(h,k)} \mid \frac{k}{gcd(h,k)}j \iff \frac{h}{gcd(h,k)}\mid j}\)

    所以,最小的正数 \(\mathsf{j=\frac{h}{gcd(h,k)}}\)

  1. 引理:如果 a 在模 m 下阶为 h 并且 b 在模 m 下阶为 k 并且 \(\mathsf{gcd(h,k)=1}\) 那么 ab 在模 m 下的阶是 hk
  • 例子:

    \(\mathsf{ord_{11}(4)=5 \qquad ord_{11}(10)=2 \quad \Rightarrow \quad ord_{11}(4 \times 10 \equiv 7)=10}\)

  • 证明:

    \(\mathsf{(ab)^{hk} \equiv (a^{h})^{k}(b^{k})^{h} \equiv 1^{k}1^{h} \equiv 1\ mod\ m}\)

    相反,假设\(\mathsf{r=ord_{m}(ab)}\)

    \(\mathsf{(ab)^{r} \equiv 1\ mod\ m \qquad (ab)^{rh} \equiv 1\ mod\ m \qquad (a^{h})^{r}b^{rh} \equiv 1\ mod\ m \qquad b^{rh} \equiv 1\ mod\ m}\)

    所以,\(\mathsf{k \mid rh\ \Rightarrow\ k \mid r}\) ( 因为 \(\mathsf{gcd(k,h)=1}\)) 并且类似的 \(\mathsf{h \mid r}\)

    所以,\(\mathsf{hk \mid r}\) 因此 \(\mathsf{hk=ord_{m}(ab)}\)

四、原根

  1. 定义 (原根):如果 a 在模 m 下的阶是 \(\mathsf{\phi(m)}\) ,称 a 是模 m 下的原根
  • 例子:

    3 是模 7 下的原根

    2,7 是模 11 下的原根

  1. 引理:令 p 为素数并且对于一些其他的素数 q 假设 \(\mathsf{q^{e} \mid p-1}\) 。那么在模 p 下存在一个 \(\mathsf{q^{e}}\) 阶元素。令 \(\mathsf{p-1=q_{1}^{e_{1}}q_{2}^{e_{2}} \cdots q_{r}^{e_{r}}}\) 。该引理意味着 \(\mathsf{\exists\ g_{1},\ g_{2}\ \cdots}\) 使 \(\mathsf{ord_{p}(g_{1})=q_{1}^{e_{1}},\ ord_{p}(g_{2})=q_{2}^{e_{2}} \cdots}\) 等等。
  • 例子:

    \(\mathsf{p=101,\ q=5,\ e=2 \qquad ord_{101}31=25}\)

  1. 推论:令 \(\mathsf{g=g_{1}g_{2} \cdots g_{r}}\) ,由之前的引理 g 的阶为 \(\mathsf{q_{1}^{e_{1}}q_{2}^{e_{2}} \cdots q_{r}^{e_{r}}=p-1= \phi(p)}\) 。因为所有的 \(\mathsf{q_{i}}\) 都成对的互素,所以 g 是模 p 下的原根
  2. 原根的数量:如果至少存在一个原根,那么在模 m 下原根的个数为 \(\mathsf{\phi(\phi(m))}\) 。特别的,如果 m 是素数,原根的数目就是 \(\mathsf{\phi(m-1)}\)
  • 例子:

    \(\mathsf{\phi(\phi(31))=8}\) 实际上 \(\mathsf{\{3,\ 11,\ 12,\ 13,\ 17,\ 21,\ 22,\ 24\ \}}\) 为 31 的原根

  1. 定理:在模 m 下存在一个原根当且仅当 \(\mathsf{m=1,\ 2,\ 4,\ p^{e},\ 2p^{e}}\)
  2. 其它相关概念:离散对数 等
  • 例子:

    \(\mathsf{2^{x} \equiv 5\ mod\ 11 \qquad x=log_{2}5\ mod\ 11}\) 这是一个 NPC-hard 问题

有关【数论与组合数学 3】Hensel 引理、原根的更多相关文章

  1. ruby - 最多 n 的组合 - 2

    给定一个数组a,什么是实现其组合直到第n的最佳方法?例如:a=%i[abc]n=2#Expected=>[[],[:a],[:b],[:c],[:a,b],[:b,:c],[:c,:a]] 最佳答案 做如下:a=%w[abc]n=30.upto(n).flat_map{|i|a.combination(i).to_a}#=>[[],["a"],["b"],["c"],["a","b"],#["a","c"],["b","c"],["a","b","c"]] 关于ruby-最多n的组合,我

  2. ruby - Rails 组合多个 activerecord 关系 - 2

    我想合并多个事件记录关系例如,apple_companies=Company.where("namelike?","%apple%")banana_companies=Company.where("namelike?","%banana%")我想结合这两个关系。不是合并,合并是apple_companies.merge(banana_companies)=>Company.where("namelike?andnamelike?","%apple%","%banana%")我要Company.where("名字像?还是名字像?","%apple%","%banana%")之后,我会写代

  3. ruby - 如何在 ruby 中组合/排列? - 2

    我有一个熟悉的问题,看起来像是数学世界的排列/组合。如何通过ruby​​实现以下目标?badges="1-2-3"badge_cascade=[]badges.split("-").eachdo|b|badge_cascade["1","2","3"]ButIwantittobeis:=>["1","2","3","1-2","2-3","3-1","2-1","3-2","1-3","1-2-3","2-3-1","3-1-2"] 最佳答案 函数式方法:bs="1-2-3".split("-")strings=1.upto(bs.

  4. ruby - 我可以在 Ruby 中动态调用数学运算符吗? - 2

    ruby中有这样的东西吗?send(+,1,2)我想让这段代码看起来不那么冗余ifop=="+"returnarg1+arg2elsifop=="-"returnarg1-arg2elsifop=="*"returnarg1*arg2elsifop=="/"returnarg1/arg2 最佳答案 是的,只需像这样使用send(或者更好的是public_send):arg1.public_send(op,arg2)这是可行的,因为Ruby中的大多数运算符(包括+、-、*、/、andmore)只需调用方法。所以1+2与1.+(2)相同

  5. ruby - 更快的 n 选择 k 来组合数组 ruby - 2

    在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种

  6. ruby-on-rails - Ruby 哈希组合 - 2

    对于一个电子商务应用程序,我试图将选项的散列(每个选项都有一系列选择)转换为代表这些选择组合的散列数组。例如:#Input:{:color=>["blue","grey"],:size=>["s","m","l"]}#Output:[{:color=>"blue",:size=>"s"},{:color=>"blue",:size=>"m"},{:color=>"blue",:size=>"m"},{:color=>"grey",:size=>"s"},{:color=>"grey",:size=>"m"},{:color=>"grey",:size=>"m"}]Input内部可能有额

  7. ruby - 为什么 Ruby 的 splat 在组合数组时比使用 + 组合数组慢? - 2

    我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将splat转换为数组文字,而不必每次都对其调用+方法。那么,为什么+比splat更快?我使用了这个基准代码:deftest(trials=1000)head=[1,2,3]tail=100.times.to_at=Time.now.to_ftrials.timesdo|i|a=[head,*tail]endputs"splatdonein#{Time.now.to_f-t}"t=Time.now.to_ftrials.timesdo|i|a=head+tailendputs"

  8. ruby |设计数学? - 2

    情况:我正在编写一个程序来求解素数。我需要解决4x^2+y^2=n的问题,其中n是一个已知变量。是的,必须是Ruby。我愿意在这个项目上花费大量时间。我最好自己编写方程式的求解算法,并将其作为该项目的一部分。我真正喜欢的是:如果任何人都可以向我提供指南、网站的链接,或者关于与求解代数方程特别相关的形式算法的构造的歧义消除,或者向我提供似乎你是读者它会帮助我完成任务。请不要建议我使用其他语言。如果您在回答之前接受我真的非常想这样做,我将不胜感激。该项目没有范围或时间限制,也不以营利为目的。这是为了我自己的教育。注意:我并不直接反对为Ruby实现和使用现存的数学库/模块/其他东西,但我更喜

  9. ruby - 我在哪里可以找到 Ruby 中的数学密集型应用程序 - 2

    我发现许多Rails应用程序主要针对企业、社交网络类型的Web应用程序。我看到有人将Ruby与一些出色的OOPS语言(如Java和C#)进行了比较,但我确实发现很难获得一些数学密集型应用程序。非常感谢任何知识渊博的输入(指向示例程序的链接等),其中轻松显示了语言的用法,就像快速启动或显示该语言如何用于各种数学问题一样。 最佳答案 不幸的是,Ruby并没有在数学和科学计算领域涉足太多。目前,有一个名为SciRuby的pre-alpha库它试图为Ruby带来更多面向数学的功能。他们正试图构建一个NumPy/SciPy等价物。SciRub

  10. ruby - Ruby 的排序方法如何与组合比较(宇宙飞船)运算符一起工作? - 2

    这里是初级程序员,只是想了解Ruby背后的过程sort使用飞船操作符时的方法.希望有人能帮忙。在以下内容中:array=[1,2,3]array.sort{|a,b|ab}...我明白sort一次比较一对数字,然后返回-1如果a属于b之前,0如果它们相等,或者1如果a应该遵循b.但是在降序排序的情况下,像这样:array.sort{|a,b|ba}...到底发生了什么?是否sort还是比较ab然后翻转结果?或者它是在解释return的-1,0和1具有相反的行为?换句话说,为什么要像这样将变量放在block中:array.sort{|b,a|ba}...结果与第一个示例中的排序模式相同?

随机推荐