证明:
想找的解 \(\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)}\) 的解。
证明:
上述定理一定适用于度为 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 个解。
推论:如果 \(\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}\)
定理:令 \(\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 个不同的根。
例子:
\(\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 个解。
例子:
\(\mathsf{ord_{7}(2)=3 \qquad ord_{11}(2)=10 \qquad ord_{11}(5)=5}\)
例子:
\(\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}\)
例子:
\(\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)}}\)
例子:
\(\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)}\)
例子:
3 是模 7 下的原根
2,7 是模 11 下的原根
例子:
\(\mathsf{p=101,\ q=5,\ e=2 \qquad ord_{101}31=25}\)
例子:
\(\mathsf{\phi(\phi(31))=8}\) 实际上 \(\mathsf{\{3,\ 11,\ 12,\ 13,\ 17,\ 21,\ 22,\ 24\ \}}\) 为 31 的原根
例子:
\(\mathsf{2^{x} \equiv 5\ mod\ 11 \qquad x=log_{2}5\ mod\ 11}\) 这是一个 NPC-hard 问题
给定一个数组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的组合,我
我想合并多个事件记录关系例如,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%")之后,我会写代
我有一个熟悉的问题,看起来像是数学世界的排列/组合。如何通过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.
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)相同
在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种
对于一个电子商务应用程序,我试图将选项的散列(每个选项都有一系列选择)转换为代表这些选择组合的散列数组。例如:#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内部可能有额
我大胆猜测将一个数组拼成另一个数组比将两个数组加在一起更快,但经过快速基准测试后我发现我错了。我假设解释器只会将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"
情况:我正在编写一个程序来求解素数。我需要解决4x^2+y^2=n的问题,其中n是一个已知变量。是的,必须是Ruby。我愿意在这个项目上花费大量时间。我最好自己编写方程式的求解算法,并将其作为该项目的一部分。我真正喜欢的是:如果任何人都可以向我提供指南、网站的链接,或者关于与求解代数方程特别相关的形式算法的构造的歧义消除,或者向我提供似乎你是读者它会帮助我完成任务。请不要建议我使用其他语言。如果您在回答之前接受我真的非常想这样做,我将不胜感激。该项目没有范围或时间限制,也不以营利为目的。这是为了我自己的教育。注意:我并不直接反对为Ruby实现和使用现存的数学库/模块/其他东西,但我更喜
我发现许多Rails应用程序主要针对企业、社交网络类型的Web应用程序。我看到有人将Ruby与一些出色的OOPS语言(如Java和C#)进行了比较,但我确实发现很难获得一些数学密集型应用程序。非常感谢任何知识渊博的输入(指向示例程序的链接等),其中轻松显示了语言的用法,就像快速启动或显示该语言如何用于各种数学问题一样。 最佳答案 不幸的是,Ruby并没有在数学和科学计算领域涉足太多。目前,有一个名为SciRuby的pre-alpha库它试图为Ruby带来更多面向数学的功能。他们正试图构建一个NumPy/SciPy等价物。SciRub
这里是初级程序员,只是想了解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}...结果与第一个示例中的排序模式相同?