1. 令 \(\mathsf{a,\ b,\ m}\) 为整数,且 $ \mathsf{m \neq 0}$ 。当满足 \(\mathsf{m \mid (a-b)}\) 时,称 a 与 b 模 m 同余,写作 \(\mathsf{a \equiv b \ mod \ m}\)
例子:
\(\mathsf{3 \equiv 27\ mod\ 12}\), \(\mathsf{-3 \equiv 11\ mod\ 7}\)
2. 基本性质:同余兼容常用加法与乘法运算。如果 \(\mathsf{a \equiv b\ (mod\ m)}\) 并且 \(\mathsf{c \equiv d\ (mod\ m)}\),那么 \(\mathsf{a+c \equiv b+d\ (mod\ m)}\),\(\mathsf{ac\equiv bd\ (mod\ m)}\)
例子:
$\mathsf{4 + 12 \equiv 26 + 1\ (mod\ 11)} $, \(\mathsf{4 \times 12 \equiv 26 \times 1\ (mod\ 11)}\)
证明:
\(\mathsf{a = b + mk,c = d + ml,a + c = b + d + m(k + l)}\)
\(\mathsf{ac = bd + bml + dmk + m^{2}kl = bd + m(bl + dk + mkl)}\)
3. 同样地:如果 \(\mathsf{a \equiv b\ (mod\ m)}\),那么 \(\mathsf{a^{k} \equiv b^{k}\ (mod\ m)}\)
4. 然而,下面的推论是错误的:
\(\qquad\)如果 \(\mathsf{a \equiv b\ (mod\ m)}\) 并且 \(\mathsf{c \equiv d\ (mod\ m)}\),那么 \(\mathsf{a^{c} \equiv b^{d}\ (mod\ m)}\)
\(\qquad\)如果 \(\mathsf{ax \equiv bx\ (mod m)}\),那么 \(\mathsf{a \equiv b\ (mod\ m)}\)
例子:
\(\mathsf{4^{12} \neq 4^{1}\ (mod 11)}\), \(\mathsf{8^{2} \neq 3^{7}\ (mod\ 5)}\), \(\mathsf{5 \times 2 \equiv 2 \times 2\ (mod\ 6)}\)
模 m 的完全剩余系:一组整数 \(\mathsf{a_{1},\ a_{2},\ \cdots\ a_{m}}\),满足当 \(\mathsf{i \neq j}\) 时,\(\mathsf{a_{i} \neq a_{j}\ mod\ m}\),即 m 个数两两互不同余。
模 m 的简化剩余系:m 的完全剩余系中与 m 互素的数构成的子集。
例子:
如果 \(\mathsf{m=9}\),完全剩余系:\(\mathsf{\{1,\ 2,\ 3,\ 4,\ 5,\ 6,\ 7,\ 8,\ 9 \}}\) 简化剩余系:\(\mathsf{\{ 1,\ 2,\ 4,\ 5,\ 7,\ 8 \}}\)
如果 \(\mathsf{m=10}\),完全剩余系:\(\mathsf{\{1,\ 2,\ 3,\ 4,\ 5,\ 6,\ 7,\ 8,\ 9,\ 10 \}}\) 简化剩余系:\(\mathsf{\{ 1,\ 3,\ 7,\ 9 \}}\)
1. 简化剩余系中元素个数,用 \(\mathsf{\phi(m)}\) 表示。
例子:
\(\mathsf{\phi(9)=6}\), \(\mathsf{\phi(10)=4}\)
1. 如果 \(\mathsf{gcd(a,m)=1}\),那么 \(\mathsf{a^{\phi(m)} \equiv 1\ mod\ m}\)
例子:
\(\mathsf{3^{\phi(10)}=81 \equiv 1 mod 10}\)
2. 引理:如果 \(\mathsf{gcd(a,m)=1}\) 并且 \(\mathsf{r_{1}\ r_{2}\ \cdots r_{k}}\) 是模 m 的简化剩余系,\(\mathsf{k=\phi(m)}\)。那么 \(\mathsf{ar_{1}\ ar_{2}\ \cdots ar_{k}}\) 也是模 m 的简化剩余系。
例子:
模 10 的简化剩余系统 \(\mathsf{s=\{ 1,\ 3,\ 7,\ 9\}}\), \(\mathsf{7s=\{7,\ 1,\ 9,\ 3\}}\)
证明:
因为 \(\mathsf{gcd(r,m)}\) 和 \(\mathsf{gcd(a,m)=1}\),所以 \(\mathsf{gcd(ar,m)=1}\)。如果 \(\mathsf{ar_{i} \equiv ar_{j}\ mod\ m}\),那么 \(\mathsf{m\ |\ ar_{i}-ar_{j}=a(r_{i}-r_{j})}\)
如果 \(\mathsf{gcd(a,m)=1}\),那么 \(\mathsf{m \mid r_{i}-r_{j}\ \Rightarrow\ r_{i} \equiv r_{j}\ mod\ m}\),仅当 \(\mathsf{i=j}\) 时成立。所以 \(\mathsf{ar_{i}}\) 全部与 m 互素并且在模 m 下不同。
1. 如果 p 为素数 a 为整数,则 \(\mathsf{\phi(p)=p-1,\phi(p^{n})=(p-1)p^{n-1}}\),那么 \(\mathsf{a^{p} \equiv a(mod\ p)}\)
例子:
\(\mathsf{3^{5} \equiv 3\ mod\ 5}\), \(\mathsf{2^{11} \equiv 2\ mod\ 11}\)
1. 如果 \(\mathsf{gcd(a,m)=1}\),那么在模 m 下,存在唯一的一个整数 b ,使 \(\mathsf{ab \equiv 1\ mod\ m}\),则 b 是 a 的模逆元,用 \(\mathsf{\frac{1}{a}}\) 或 \(\mathsf{a^{-1}\ mod\ m}\) 表示。
例子:
\(\mathsf{\frac{1}{5}\ mod\ 7=5^{-1}\ mod\ 7=3}\)
存在性:
因为 \(\mathsf{gcd(a,m)=1}\),对于某些整数 \(\mathsf{x,y}\),\(\mathsf{ax+my=1}\),所以 \(\mathsf{ax \equiv 1\ mod\ m}\) 令 \(\mathsf{b=x}\) 即可
唯一性:
如果 \(\mathsf{ab_{1} \equiv 1\ mod\ m}\) 并且 \(\mathsf{ab_{2} \equiv 1\ mod\ m}\)
那么 \(\mathsf{ab_{1} \equiv ab_{2}\ mod\ m \Rightarrow m \mid a(b_{1}-b_{2})}\)
因为 \(\mathsf{gcd(m,a)=1}\),$\mathsf{m \mid b_{1}-b_{2} \Rightarrow b_{1} \equiv b_{2}\ mod\ m} $
例子:
$ \mathsf{4!=24 \equiv -1\ mod\ 5}$
证明:
\(\mathsf{x^{2} \equiv 1\ mod\ p \Rightarrow p \mid (x^{2}-1) \Rightarrow p \mid (x-1)(x+1) \Rightarrow p \mid x \pm 1 \Rightarrow x \equiv \pm1\ mod\ p}\)
例子:
\(\mathsf{x^{2} \equiv -1\ mod\ 13}\) 的解为 \(\mathsf{\{5,\ 8 \}}\), \(\mathsf{x^{2} \equiv 1\ mod\ 15}\) 的解为 \(\mathsf{\{\pm1,\ \pm4\ mod\ 15 \}}\)
1. 定理:令 \(\mathsf{g=gcd(a,m)}\),线性同余方程组 \(\mathsf{ax \equiv b\ mod\ m}\) 解存在当且仅当 \(\mathsf{g \mid b}\),且在模 m 下解一共有 g 个。
例子:
\(\mathsf{4x \equiv 5\ mod\ 10}\) 无解,因为 \(\mathsf{g=gcd(4,10) \nmid 5}\)
\(\mathsf{4x \equiv 6\ mod\ 10}\) 有解 \(\mathsf{x=4}\),实际上有 \(\mathsf{g=2}\) 个解,另一个解为 \(\mathsf{x=9}\)
证明:
假设 $\mathsf{g \nmid b} $,
假设 \(\mathsf{x_{0}}\) 是一个解 \(\mathsf{\Rightarrow}\) 对于某些整数 k,\(\mathsf{ax_{0}=b+mk}\)
因为 \(\mathsf{g \mid a,\ g \mid m,\ g}\) 整除 \(\mathsf{ax_{0}-mk=b}\),与假设矛盾,故 \(\mathsf{g \mid b}\)
对于整数 \(\mathsf{x_{0},\ y_{0},\ g=ax_{0}+my_{0}}\)
设 \(\mathsf{b=b^{'}g}\),则 \(\mathsf{b=b^{'}g=b^{'}(ax_{0}+my_{0})=a(b^{'}x_{0})+m(b^{'}y_{0})\ \Rightarrow \ a(b^{'}x_{0}) \equiv b\ (mod\ m)}\)
所以,\(\mathsf{x=b^{'}x_{0}}\) 是一个解。
证明确实存在 g 个解:
假设有一个解 \(\mathsf{x_{1}}\),那么 \(\mathsf{ax \equiv b \equiv ax_{1}\ mod\ m}\),\(\mathsf{a(x-x_{1})=0\ (mod\ m)}\)
对于某些整数 k,\(\mathsf{a(x-x_{1})=mk}\)
\(\mathsf{g=gcd(a,m)\ \Rightarrow a=a^{'}g,m=m^{'}g}\) 所以 \(\mathsf{gcd(a^{'},m^{'}=1)}\)
则 \(\mathsf{a^{'}g(x-x_{1})=m^{'}gk\ \Rightarrow}\) 对于某些 k,\(\mathsf{a^{'}(x-x_{1})=m^{'}k}\)
所以 \(\mathsf{m^{'} \mid x-x_{1}}\) ,则 \(\mathsf{x \equiv x_{1}\ mod\ m^{'}}\)
所以,所有的解为:\(\mathsf{x_{1},\ x_{1}+m^{'},\ x_{1}+2m^{'},\ \cdots,\ x_{1}+(g-1)m^{'} }\)
1. 欧几里得扩展算法用于获得模逆元 \(\mathsf{a^{-1}\ mod\ n}\),当 \(\mathsf{gcd(a,n)=1}\) 时。
例子:
\(\mathsf{41=1 \times 23 + 18}\)
\(\mathsf{23=1 \times 18 + 5}\)
\(\mathsf{18=3 \times 5 + 3}\)
\(\mathsf{5=1 \times 3 + 2}\)
\(\mathsf{3=1 \times 2 + 1}\)
\(\mathsf{2=2 \times 1}\)
\(\mathsf{1=3-1 \times 2=3-(5-1 \times 3)=-1 \times 5 + 2 \times 3}\)
\(\mathsf{=-1 \times 5 +2 \times (18-3 \times 5) =2 \times 18 - 7 \times 5 }\)
\(\mathsf{= 2 \times 18 - 7 \times (23-1 \times 18)=-7 \times 23 + 9 \times 18}\)
\(\mathsf{=-7 \times 23 + 9 \times (41 - 1 \times 23)=9 \times 41 - 16 \times 23}\)
所以,\(\mathsf{23^{-1}\ mod\ 41 = -16\ or\ 25}\)
伪代码:
function inverse(a, n)
t := 0; newt := 1;
r := n; newr := a;
while newr != 0
quotient := r div newr
(t, newt) := (newt, t - quotient * newt)
(r, newr) := (newr, r - quotient * newr)
if r > 1 then return "a is not invertible"
if t < 0 then t := t + n
return t
1. 问题:
\(\mathsf{\qquad \begin{cases} x \equiv a_{1}\ (mod\ m_{1}) \\x \equiv a_{2}\ (mod\ m_{2}) \\ \cdots \qquad\qquad \cdots \\x \equiv a_{k}\ (mod\ m_{k}) \end{cases}}\)
2. 解决方法(中国剩余定理):
\(\mathsf{\qquad M_{i}= \frac{\prod m_{i}}{m_{i}},y_{i}=M_{i}^{-1}\ mod\ m_{i},x=\sum a_{i}M_{i}y_{i}\ mod\ (\prod m_{i})}\)
例子:
\(\mathsf{\begin{cases} x \equiv 5 \quad (mod\ 7) \\x \equiv 3 \quad (mod\ 11) \\x \equiv 10 \quad (mod\ 13) \end{cases}}\)
| sn | a | m | M | y |
|---|---|---|---|---|
| 1 | 5 | 7 | 143 | 5 |
| 2 | 3 | 11 | 91 | 4 |
| 3 | 10 | 13 | 77 | 12 |
\(\qquad\)所以,结果 \(\mathsf{(\sum aMy)}\) 在模 1001 下为 894
\(\mathsf{\qquad \begin{cases} 894 \equiv 5 \quad (mod\ 7) \\894 \equiv 3 \quad (mod\ 11) \\894 \equiv 10 \quad (mod\ 13) \end{cases}}\)
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
给定一个数组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