例子:
\(\mathsf{p=5}\) 时,因为
\(\mathsf{1^{2}\equiv 1\ mod\ 5 \qquad 2^{2}\equiv 4\ mod\ 5 \qquad 3^{2}\equiv 4\ mod\ 5 \qquad 4^{2}\equiv 1\ mod\ 5}\)
则 1,4 是模 5 下的平方剩余,而 2,3 是模 5 下的平方非剩余
\(\mathsf{p=7}\) 时,因为
\(\mathsf{1^{2}\equiv 1\ mod\ 7 \qquad 2^{2}\equiv 4\ mod\ 7 \qquad 3^{2}\equiv 2\ mod\ 7 \qquad 4^{2}\equiv 2\ mod\ 7 \qquad 5^{2}\equiv 4\ mod\ 7 \qquad 6^{2}\equiv 1\ mod\ 7}\)
则 1,2,4 为模 7 下的平方剩余,而 3,5,6 是模 7 下的平方非剩余
例子:
15 是模 17 下的平方剩余,因为 \(\mathsf{15^{\frac{17-1}{2}}\equiv 1\ mod\ 17}\)
12 是模 17 下的平方非剩余,因为 \(\mathsf{12^{\frac{17-1}{2}}\equiv -1\ mod\ 17}\)
证明:
p 是奇数,所以根据欧拉定理:\(\mathsf{a^{p-1}\equiv 1\ mod\ p \qquad (a^{\frac{p-1}{2}})^{2}\equiv 1\ mod\ p \qquad a^{\frac{p-1}{2}}\equiv \pm1\ mod\ p}\)
设 g 为模 p 下的原根,则 \(\mathsf{\{1,\ g,\ g^{2},\ \cdots,\ g^{p-2}\}=1,\ 2,\ \cdots,\ p-1\ mod\ p}\)
对应某些 k ,设 \(\mathsf{a \equiv g^{k}\ mod\ p}\) ,所以 \(\mathsf{a \equiv g^{k+(p-1)m}\ mod\ p}\)
当 k 是偶数时,a 是模 p 下的平方剩余
如果 \(\mathsf{k=2l}\) ,那么 \(\mathsf{a \equiv g^{2l} \equiv (g^{l})^{2}}\)
相反,如果\(\mathsf{a \equiv b^{2}\ mod\ p}\) 并且假设 \(\mathsf{b=g^{l}\ mod\ p}\) ,那么 \(\mathsf{a \equiv g^{2l}\ mod\ p}\) ,所以 k 是偶数。
证明:
\(\mathsf{a^{\frac{p-1}{2}}b^{\frac{p-1}{2}}\equiv (ab)^{\frac{p-1}{2}}\ mod\ p \qquad (a^{2} \mid p)=(a \mid p)^{2}=1}\)
例子:
\(\mathsf{(-9 \mid 71)=(-1 \times 3^{2} \mid 71)=(-1 \mid 71)(3^{2} \mid 71)=(-1 \mid 71)=(-1)^{35}\ mod\ 71=-1}\)
\(\mathsf{(-9 \mid 53)=(-1 \times 3^{2} \mid 53)=(-1 \mid 53)(3^{2} \mid 53)=(-1 \mid 53)=(-1)^{26}\ mod\ 53=1}\)
例子:
\(\mathsf{p=13 \qquad a=5 \qquad \{a,\ 2a,\ \cdots,\ (\frac{p-1}{2})a\}=\{5,\ 10,\ 15,\ 20,\ 25,\ 30 \}}\)
\(\mathsf{\{(a)_{p},\ (2a)_{p},\ \cdots,\ ((\frac{p-1}{2})a)_{p}\}=\{5,\ -3,\ 2,\ -6,\ -1,\ 4\}}\)
其中有 3 个负数,所以 \(\mathsf{(5 \mid 13)=(-1)^{3}=-1}\)
\(\mathsf{p=13 \qquad a=10 \qquad \{a,\ 2a,\ \cdots,\ (\frac{p-1}{2})a\}=\{10,\ 20,\ 30,\ 40,\ 50,\ 60\}}\)
\(\mathsf{\{(a)_{p},\ (2a)_{p},\ \cdots,\ ((\frac{p-1}{2})a)_{p}\}=\{-3,\ -6,\ 4,\ 1,\ -2,\ -5\}}\)
其中有 4 个负数,所以 \(\mathsf{(10 \mid 13)=(-1)^{4}=1}\)
证明:
首先证明:如果 \(\mathsf{1 \leq k \neq l \leq (p-1)/2}\) ,那么 \(\mathsf{(ka)_{p} \neq \pm (la)_{p}}\)
假设 \(\mathsf{(ka)_{p}= \pm(la)_{p}}\) 不正确,那么有 \(\mathsf{ka \equiv \pm\ la\ mod\ p \Rightarrow (k \pm l)a \equiv 0\ mod\ p \Rightarrow k \pm l \equiv 0\ mod\ p}\)
这是不可能的,因为 \(\mathsf{2 \leq k+l \leq p-1\ ,\ -p/2 < k-l < p/2\ ,\ k-l \neq 0}\)
所以在模 p 下数 \(\mathsf{\mid (ka)_{p} \mid\ \qquad k=1,\ 2,\ \cdots,\ \frac{p-1}{2}}\) 全部是不同的 (它们有 \(\mathsf{\frac{p-1}{2}}\) 个) 并且必须是整数 \(\mathsf{\{1,\ 2,\ \cdots,\ \frac{p-1}{2} \}}\) 且按照某种顺序排列。
\(\mathsf{1 \cdot 2 \cdots(\frac{p-1}{2})\equiv \prod\limits_{k=1}^{\frac{p-1}{2}}\mid (ka)_{p} \mid\ mod\ p}\) ,恰好是 n 个数字 \(\mathsf{(ka)_{p}<0}\) 则 \(\mathsf{\equiv(-1)^{n}\prod\limits_{k=1}^{\frac{p-1}{2}}(ka)_{p}\ mod\ p}\)
\(\mathsf{\equiv (-1)^{n} \prod\limits_{k=1}^{\frac{p-1}{2}}ka\ mod\ p \equiv a^{\frac{p-1}{2}}(-1)^{n}(1\cdot 2 \cdots (\frac{p-1}{2}))\ mod\ p}\)
\(\mathsf{\Rightarrow 1 \equiv a^{\frac{p-1}{2}}(-1)^{n}\ mod\ p \quad \Rightarrow \quad a^{\frac{p-1}{2}}\equiv (-1)^{n}\ mod\ p \quad \Rightarrow \quad (a \mid p)\equiv (-1)^{n}\ mod\ p}\)
证明:
使用高斯引理,主要关注 \(\mathsf{(-1)^{n}}\) 或 \(\mathsf{n\ mod\ 2}\) 的情况。
对于 1 到 \(\mathsf{\frac{p-1}{2}}\) 之间的每个数 k ,\(\mathsf{ka=p\lfloor \frac{ka}{p} \rfloor +ka\ mod\ p}\)
\(\mathsf{ka=p \lfloor \frac{ka}{p} \rfloor +(ka)_{p}+ \begin{cases}0 \qquad 如果 (ka)_{p}>0 \\p \qquad 如果 (ka)_{p}<0 \end{cases}}\)
\(\mathsf{ka= \lfloor \frac{ka}{p} \rfloor + \mid (ka)_{p} \mid + \begin{cases}0 \qquad 如果 (ka)_{p}>0 \\1 \qquad 如果 (ka)_{p}<0 \end{cases}\ mod\ 2}\)
\(\mathsf{\sum\limits_{k=1}^{\frac{p-1}{2}}ka \equiv \sum\limits_{k=1}^{\frac{p-1}{2}} \lfloor \frac{ka}{p} \rfloor+\sum\limits_{k=1}^{\frac{p-1}{2}}\mid(ka)_{p}\mid+n\ (mod\ 2)}\)
\(\mathsf{\sum\limits_{k=1}^{\frac{p-1}{2}}ka=a\sum\limits_{k=1}^{\frac{p-1}{2}}k=\frac{a}{2}(\frac{p-1}{2})(\frac{p-1}{2}+1)=\frac{a(p^{2}-1)}{8}}\)
由于 \(\mathsf{\{\mid a\mid_{p},\ \cdots,\ \mid \frac{p-1}{2} a \mid _{p}\}}\) 是 \(\mathsf{\{1,\ \cdots,\ \frac{p-1}{2} \}}\)
\(\mathsf{\sum\limits_{k=1}^{\frac{p-1}{2}}\mid (ka)_{p} \mid = \sum\limits_{k=1}^{\frac{p-1}{2}}k=\frac{1}{2}(\frac{p-1}{2})(\frac{p-1}{2}+1)=\frac{(p^{2}-1)}{8}}\)
所以,\(\mathsf{n\equiv \frac{a(p^{2}-1)}{8}-\frac{p^{2}-1}{8}+\sum\limits_{k=1}^{\frac{p-1}{2}} \lfloor \frac{ka}{p} \rfloor\ (mod\ 2)}\)
\(\mathsf{n\equiv \frac{(a-1)(p^{2}-1)}{8}+\sum\limits_{k=1}^{\frac{p-1}{2}}\lfloor \frac{ka}{p} \rfloor\ mod\ 2}\)
\(\mathsf{n\equiv \sum\limits_{k=1}^{\frac{p-1}{2}} \lfloor \frac{ka}{p} \rfloor \equiv t\ mod\ 2}\)
由于 a 是奇数,所以 \(\mathsf{(a\mid p)=(-1)^{t}}\)
如果 \(\mathsf{a=2}\) ,\(\mathsf{n\equiv \frac{(p^{2}-1)}{8}+\sum\limits_{k=1}^{\frac{p-1}{2}} \lfloor \frac{2k}{p} \rfloor\ mod\ 2 \qquad k \in \{1,\ 2,\ \cdots,\ \frac{p-1}{2}\}}\)
所以 \(\mathsf{\lfloor \frac{2k}{p} \rfloor=0}\) ,则 \(\mathsf{n \equiv \frac{(p^{2}-1)}{8}\ mod\ 2}\) ,也就是说:
\(\mathsf{(2 \mid p)=(-1)^{(p^{2}-1)/8}=\begin{cases}1 \qquad 如果\ p=1,7\ mod\ 8 \\-1 \qquad 如果\ p=3,5\ mod\ 8 \end{cases}}\)
\(\mathsf{(-1 \mid p)=(-1)^{\frac{p-1}{2}}= \begin{cases}1 \qquad 如果\ p=1\ mod\ 4 \\-1 \qquad 如果\ p=3\ mod\ 4 \end{cases}}\)
例子:
\(\mathsf{(\frac{37}{73}) \leftarrow (\frac{73}{37}) \leftarrow (\frac{-1}{37})}\)
\(\mathsf{(7 \mid 11)=-(11 \mid 7)=-(4 \mid 7)=-1}\)
\(\mathsf{(10 \mid 13)=(2 \mid 13)(5 \mid 13)=(-1)(13 \mid 5)=-(3 \mid 5)=-(5 \mid 3)=-(2 \mid 3)=-(-1)=1}\)
\(\mathsf{p=11,\ x=\pm 1,\ \pm2,\ \pm3,\ \pm4,\ \pm5,\ \Rightarrow x^{2}=1,\ 3,\ 4,\ 5,\ 9}\)
\(\mathsf{p=13,\ x=\pm1,\ \pm2,\ \pm3,\ \pm4,\ \pm,5\ \pm6 \Rightarrow x^{2}=1,\ 3,\ 4,\ 9,\ 10,\ 12}\)
注意:
如果 \(\mathsf{(\frac{a}{n})=-1}\) 那么 a 是模 n 下的平方剩余。如果 a 是模 n 下的平方剩余并且 \(\mathsf{gcd(a,\ n)=1}\),则 \(\mathsf{(\frac{a}{n})=1}\)
但是,不同于 Legendre 符号:如果 \(\mathsf{(\frac{a}{n})=1}\) 那么 a 可能是也可能不是模 n 下的平方剩余。如:\(\mathsf{(\frac{-1}{77})=1}\) ,但是 -1 是平方非剩余
例子:
\(\mathsf{(\frac{1001}{9907})=(\frac{7}{9907})(\frac{11}{9907})(\frac{13}{9907})}\)
\(\mathsf{ (\frac{7}{9907})=-(\frac{9907}{11})=-(\frac{2}{7})=-1 \qquad (\frac{11}{9907})=-(\frac{9907}{11})=-(\frac{7}{11})=(\frac{11}{7})=(\frac{4}{7})=1 \qquad (\frac{13}{9907})=(\frac{9907}{13})=(\frac{1}{3})=1}\)
\(\mathsf{(\frac{1001}{9907})=(\frac{9907}{1001})=(\frac{898}{1001})=(\frac{2}{1001})(\frac{449}{1001})=(\frac{449}{1001})=(\frac{1001}{449})=(\frac{103}{449})=(\frac{449}{103})=(\frac{37}{103})=(\frac{103}{37})=(\frac{29}{37})=(\frac{37}{29})=(\frac{8}{29})=(\frac{2}{29})^{3}=-1}\)
Tonelli-Shanks 算法用于求解形如:\(\mathsf{x^{2} \equiv n\ mod\ p}\) 的二次同余方程。
输入:p ,一个奇素数。n 是一个整数,其中 n 是模 p 下的平方剩余。意味着 Legendre 符号\(\mathsf{(n/p)=1}\)
输出:R ,一个整数满足\(\mathsf{R^{2} \equiv n}\)
(1) 从 p-1 开始,对 p-1 进行因式分解,分解为\(\mathsf{p-1=Q2^{S}}\) ,其中 Q 为奇数。如果 \(\mathsf{S=1\ (p \equiv 3\ mod\ 4)}\) ,则由 \(\mathsf{R \equiv \pm n^{\frac{p+1}{4}}}\) 直接给出解。
(2) 选择一个 Z 为模 p 下的平方非剩余,令\(\mathsf{c \equiv z^{Q}}\)
(3) 令\(\mathsf{R \equiv n^{\frac{Q+1}{2}},t \equiv n^{Q},M=S}\)
(4) 循环:
<1> 如果\(\mathsf{t \equiv 1}\) ,返回 R
<2> 否则,找一个最小的 i ,\(\mathsf{0<i<M}\) ,使得 \(\mathsf{t^{2^{i}} \equiv 1}\) (重复平方)
<3> 令\(\mathsf{b\equiv c^{2^{(M-i-1)}}}\) 并且令 \(\mathsf{R \equiv Rb,\ t \equiv tb^{2},\ c \equiv b^{2}}\) 且 \(\mathsf{M=i}\) (mod p 条件下)
如果 R 是一个解,那么第二个解就是\(\mathsf{p-R}\)
证明:
已知 \(\mathsf{p-1=Q2^{S} \qquad r \equiv n^{\frac{Q+1}{2}}\ mod\ p \qquad t \equiv n^{Q}\ mod\ p}\)
所以 \(\mathsf{r^{2}\equiv nt\ mod\ p}\) 对于每次迭代都为真
如果 \(\mathsf{t \equiv 1\ mod\ p}\) ,那么 \(\mathsf{r^{2} \equiv n\ mod\ p}\) 并且该算法以 \(\mathsf{R \equiv \pm r\ mod\ p}\) 结束
如果 \(\mathsf{t \neq 1\ mod\ p}\) ,那么认为 z 为模 p 下的平方非剩余
令 \(\mathsf{c \equiv z^{Q}\ mod\ p}\) ,那么 \(\mathsf{c^{2^{S}} \equiv (z^{Q})^{2^{S}} \equiv z^{2^{S}Q} \equiv z^{p-1} \equiv 1\ mod\ p}\) 并且 \(\mathsf{c^{2^{S-1}} \equiv z^{\frac{p-1}{2}} \equiv -1\ mod\ p}\) 这表明 c 的阶数是 \(\mathsf{2^{S}}\)
同理,有 \(\mathsf{t^{2^{S}} \equiv 1\ mod\ p}\) ,所以 t 的阶数整除 \(\mathsf{2^{S}}\)
假设 t 的阶数是 \(\mathsf{2^{S^{'}}}\) 。由于 n 是模 p 的平方,\(\mathsf{t \equiv n^{Q}\ mod\ p}\) 也是一个平方,因此 \(\mathsf{S^{'} \leq S-1}\)
之后令 \(\mathsf{b \equiv c^{2^{S-S^{'}-1}}\ mod\ p \qquad r^{'} \equiv br\ mod\ p \qquad c^{'} \equiv b^{2}\ mod\ p \qquad t^{'} \equiv c^{'}t\ mod\ p}\) 则和上述一致,\(\mathsf{(r^{'})^{2} \equiv nt^{'}\ mod\ p}\) 成立
然而 t 和 \(\mathsf{c^{'}}\) 的阶都是 \(\mathsf{2^{s^{'}}}\) 。这表明 \(\mathsf{t^{'}}\) 的阶数为 \(\mathsf{2^{S^{''}}}\)满足 \(\mathsf{S^{''}<S{'}}\)
如果 \(\mathsf{S^{''}=0}\) 那么 \(\mathsf{t^{'} \equiv 1\ mod\ p}\) 并且该算法在 \(\mathsf{R \equiv \pm r^{'}\ mod\ p}\) 终止
否则,用 \(\mathsf{b^{'},\ r^{''},\ c^{''},\ t^{''}}\) 相似的定义重新开始循环直到 \(\mathsf{S^{' \cdots '}}\) 等于 0
因此,一系列的 S 是属于严格逐渐减少的算法,一定会终止
例子:
求解二次同余方程 \(\mathsf{x^{2} \equiv 10\ mod\ 13}\) ,明显 13 是奇素数。由于 \(\mathsf{10^{\frac{13-1}{2}}=10^{6}\equiv 1\ mod\ 13}\) ,10 是平方剩余
(1) 已知 \(\mathsf{p-1=12=3 \cdot 2^{2}}\) ,令 \(\mathsf{Q=3,\ S=2}\)
(2) 令 \(\mathsf{Z=2}\) 为平方剩余,因为 \(\mathsf{2^{\frac{13-1}{2}}=-1\ mod\ 13}\) ,令 \(\mathsf{c=2^{3} \equiv 8\ mod\ 13}\)
(3)\(\mathsf{R=10^{2} \equiv -4\ ,\ t \equiv 10^{3} \equiv-1\ mod\ 13 \qquad M=2}\)
(4) 开始循环:\(\mathsf{t \neq 1\ mod\ 13}\) ,所以 \(\mathsf{0<i<2}\) ,则 \(\mathsf{i=1}\) 。
令 \(\mathsf{b \equiv 8^{2^{2-1-1}}\equiv 8\ mod\ 13 \qquad c=b^{2}\equiv 8^{2} \equiv -1\ mod\ 13}\)
\(\mathsf{R=Rb=-4 \cdot 8 \equiv 7\ mod\ 13 \qquad t=tb^{2} \equiv -1 \cdot -1 \equiv 1\ mod\ 13 \qquad M=i=1}\)
返回开始,因为 \(\mathsf{t \equiv 1\ mod\ 13}\) 。返回 \(\mathsf{R \equiv 7\ mod\ 13}\)
验证:\(\mathsf{7^{2}=49 \equiv 10\ mod\ 13}\) 且 \(\mathsf{(-7)^{2} \equiv 6^{2} \equiv 10\ mod\ 13}\)
证明:
a 的阶数为 \(\mathsf{2^{j}\ mod\ p}\) ,则 \(\mathsf{a^{2^{j-1}} \equiv -1\ mod\ p}\) 。同理 \(\mathsf{b^{2^{j-1}} \equiv -1\ mod\ p}\)
所以,\(\mathsf{(ab)^{2^{j-1}} \equiv 1\ mod\ p}\) ,也就是说 ab 的阶数整除 \(\mathsf{2^{j-1}}\) ,因此,\(\mathsf{k<j}\)
给定一个数组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}...结果与第一个示例中的排序模式相同?