首页 > 其他分享 >模意义下的数和运算

模意义下的数和运算

时间:2022-09-04 22:36:20浏览次数:56  
标签:gcd 运算 意义 qquad times Delta ax mod

模意义下的数和运算

一共有12个苹果,平分给5个小朋友,最后会剩下几个苹果?

12➗5 = 2......2

第一个2叫商,可以用12/5得到,第二个2叫余数,可以用12%5得到,%叫做模,也就是mod

定义1:模

对于整数a,b,满足b>0,则存在唯一的整数q,r,满足\(a=bq+r\),其中\(0\leq r<b\) 。其中称q为商、r为余数。余数用a mod b或者a%b来表示

1.\((a+b)\% M=(a\% M+b\% M)\% M\)

将a个苹果分给小朋友剩下2个苹果,将b个苹果分给小朋友剩下3个苹果,那么将a+b个苹果分给小朋友剩下的苹果数量,等于把5个苹果分给小朋友剩下的数量

2.\((a-b)\% M=(a\% M-b\% M)\% M\)

即使有\(a\geq b\),但是也不能保证\(a\% M\geq b\% M\),所以这种情况下我们可以优化

\((a-b)\% M=(a\% M-b\% M+M)\% M\)

3.\((a\times b)\% M=(a\% M\times b\% M)\% M\)

\[\exists a=x_aM+r_a,b=x_bM+r_b\\ \therefore r_a=a\%M,r_b=b\%M\\ a\times b=x_ax_bMM+x_br_aM+x_ar_bM+r_ar_b\\ \therefore a\times b=(x_ax_bM+r_ax_b+r_bx_a)M+r_ar_b\\ \because x/M\times M+(x\%M)=x\\ \therefore r_ar_b=r_ar_b/M\times M+r_ar_b\%M\\ \therefore a\times b=(x_ax_bM+r_ax_b+r_bx_a+r_ar_b/M)M+r_ar_b\%M\\ \because a\%M\%M=a\%M\\ \therefore (a\times b)\%M=(r_a\times r_b)\%M \]

除法不成立

所有数mod b只有b种可能,分别是0,1,......,b-1,所以可以把所有整数分为b种类型

如果两个数mod b的结果相同,就分为同一类,叫做同余。

定义2:同余

若两数x,y除以b的余数相等,则称x,y模b同余,记作\(x\equiv y(\mod b)\)

同余的性质:

1.反身性:\(x\equiv x(\mod M)\)

2.对称性:若\(x\equiv y(\mod M)\),则\(y\equiv x(\mod M)\)

3.传递性:若\(x\equiv y(\mod M),y\equiv z(\mod M)\),则\(x\equiv z(\mod M)\)

4.同加性:若\(x\equiv y(\mod M)\),则\(x+z\equiv y+z(\mod M)\)

5.同乘性:若\(x\equiv y(\mod M)\),则\(x\times z\equiv y\times z(\mod M)\)

6.同幂性:若\(x\equiv y(\mod M)\),则\(x^z\equiv y^z(\mod M)\)

7.\(x\equiv y(\mod M)\Longleftrightarrow b|(x-y)\)

\[12\%5=2\\ 22\%5=2\\ \therefore 22\equiv12(\mod5)\\ 多出来的22-12=10个苹果平分给了5个小朋友\\ 每个小朋友多分到了2个苹果,一共多了2\times5=10个苹果\\ 如果每个小朋友多分到x个苹果,那么一共多了5x个苹果,并且5一定是5x的约数\\ 所以可以表示成:5|(22-12) \]

定义3:不定方程

不定方程:通常涉及两个或者更多未知数的多项式方程,求解尽在整数范围内进行

在本节中,只需要考虑\(ax+by=c\)的二元一次方程

定理1:裴蜀定理

裴蜀定理:对于整数a,b,设它们的最大公约数\(gcd(a,b)=d\),一定存在一组整数(x,y)使得\(ax+by=d\)

那么如何通过裴蜀定理来解决一般的\(ax+by=c\)的不定方程问题?

定理2:拓展欧几里得算法

对于整数a,b,c,\(ax+by=c\)有整数解,当且仅当\(gcd(a,b)|c\)时成立

\[充分性:\\ 若c为gcd(a,b)的倍数,那么可以先通过裴蜀定理找到一组(x,y)使得ax+by=gcd(a,b)\\ 然后将x,y同时乘以\frac{c}{gcd(a,b)}(必然为整数)\\ 就能得到ax+by=c的一组解\\ 必要性:\\ 若不定方程有解,则\\ a=t\times gcd(a,b),b=p\times gcd(a,b)\\ ax+by=t\times gcd(a,b)\times x+p\times gcd(a,b)\times y=gcd(a,b)\times(tx+py)=m\times gcd(a,b)\\ \therefore gcd(a,b)|c \]

所以我们只需要考虑\(ax+by=gcd(a,b)=d\)的一组解就可以了

我们可以使用扩展欧几里得算法(exgcd)

欧几里得算法求出a,b的最大公约数

1.当b=0时,a,b的最大公约数就是a

2.求出b,a mod b的最大公约数,设为g0

3.令g=g0,g就是a,b的最大公约数

仿照这个过程,来求解不定方程

1.当b=0时,\(ax+by=d\)的解为\(x=\frac{d}{a}\),y任意

2.求出\(bx+(a\mod b)y=d\)的一组解,设为\((x_0,y_0)\)

3.令\((x,y)=f((x_0,y_0))\),那么(x,y)就是ax+by=d的一组解。其中f((a,b))指的是将一对数(a,b)做一种变换

那么问题在于如何将(x0,y0)生成一个新的(x,y)

\[已知:\\ bx_0+(a\mod b)y_0=d\\ \because a\mod b=a-a/b\times b\\ \therefore bx_0+(a-a/b\times b)y_0=d\\ \therefore ay_0+b(x_0-a/b\times y_0)=d\\ \]

所以只要令\((x,y)=(y_0,x_0-a/b\times y_0)\),就可以解决不定方程问题

求解\(16x+6y=gcd(16,6)=2\)的一组整数解,并求出所有整数解

void exgcd(int a,int b,int &x,int &y){	//求解ax+by=gcd(a,b)
    if(b==0){
        x=1,y=0;
        //此时gcd(a,b)=gcd(a,0)=a,a*1+0*0=a
        return ;
    }
    exgcd(b,a%b,y,x);
    //求解bx0+(a%b)y0=gcd(b,a%b)
    //执行完这个语句后暂时x=y0,y=x0
    y-=a/b*x;
    //y=x0-a/b*y0
}

\[求解16x+6y=2\\ \qquad \qquad \qquad \qquad 求解6x+(16\%6)=6x+4y=2\\ \qquad \qquad \qquad \qquad \qquad 求解4x+(6\%4)y=4x+2y=2\\ \qquad \qquad \qquad \qquad \qquad \qquad 求解2x+(4\%2)y=2x+0y=2\\ \qquad \qquad \qquad \qquad \qquad \qquad x_0=1,y_0=0\\ \qquad \qquad \qquad \qquad \qquad \qquad x_1=y_0=0,y_1=x_0-4/2y_0=1\\ \qquad \qquad \qquad \qquad \qquad x_2=y_1=1,y_2=x_1-6/4y_1=-1\\ \qquad \qquad \qquad \qquad x_3=y_2=-1,y_3=x_2-16/6y_2=3 \]

由此求出\(16x+6y=2\)的一组解:\(x=-1,y=3\)

现在已经求出了一组解,那么如何求出所有解呢?

假设这个不定方程还有一组解\((x',y')\),那么就有\(ax'+by'=c\),就可以得到\(a(x'-x)+b(y'-y)=0\)

设\(\Delta x=x'-x,\Delta y=y'-y\),那么一定满足\(a\Delta x+b\Delta y=0\),

同时对于不定方程\(a\Delta x+b\Delta y=0\)的任何一组解\((\Delta x,\Delta y)\),\(a(x+\Delta x)+b(y+\Delta y)=(ax+by)+(a\Delta x+b\Delta y)=c+0=c\)

\((x+\Delta x,y+\Delta y)\)也一定是原不定方程的一组解

所以只需要求出\(a\Delta x+b\Delta y=0\)的所有解,再将这些解加上原来求出的特解,就可以得到原不定方程的所有解

首先求出\(ax+by=0\)的最小一组非零解\((x_{min},y_{min})\)(指绝对值最小),考虑\(ax+by=0\),则\(|ax|=|by|\),那么\(|ax|\)或者说\(|by|\),一定同时是a,b的倍数,想让|x|尽量小,也就是让a,b的公倍数尽量小,最小就是a,b的最小公倍数\(lcm(a,b)=a\times b/gcd(a,b)\)。

所以最小的一组非零解就是\((x_{min},y_{min}=(\frac{b}{gcd(a,b)}),\frac{-a}{gcd(a,b)})\)

于是我们就可以求出形如\(ax+by=c\)的方程的所有解了。对于本样例不定方程来说,\(ax+by=0\)的最小的一组非零解是\(x'=3,y'=-8\)。所以\(16x+6y=2\)的所有解就是\(x=-1+3k,y=3-8k\)

如果想要求出\(16x+6y=6\)的解呢?因为6是2的3倍,所以求出来的特解就是\(16x+6y=2\)求出的特解的3倍,也就是\(x=-3,y=9\),同时\(16x+6y=0\)的解是不变的,所以最后的解为\(x=-3+3k,y=9-8k\)

青蛙的约会

以纬度线东经0度为起点,由东向西为正方向,总长为L米,青蛙A的起始点为x,一次能向正方向跳m米,青蛙B的起始点为y,一次能向正方向跳n米,跳一次花费时间相同,问跳几次会相遇

\[青蛙A:(x+km)\%L\\ 青蛙B:(y+kn)\%L\\ \therefore x+km \equiv y+kn(\mod L)\\ k(m-n)+zL=y-x\\ \]

#include <bits/stdc++.h>
using namespace std;
long long x,y,m,n,L,d,k,z;
int f=1;
long long exgcd(long long a,long long b,long long &x,long long &y){		//ax+by=gcd(a,b)
    if(b==0){
        x=1,y=0;
        return a;
    }
    long long d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
int main()
{
    cin>>x>>y>>m>>n>>L;
    if(m<n){		//处理m-n为负数的情况
        swap(n,m);
        f=-1;
    }
    d=exgcd(m-n,L,k,z);		//k(m-n)+zL=y-x
    if((y-x)%d!=0){			//判断是否无解
        cout<<"Impossible"<<endl;
        return 0;
    }
    k=k*f*(y-x)/d;			//求解k*(m-n)+zL=y-x
    k=(k%(L/d)+(L/d))%(L/d);		//求出最小的正数x
    cout<<k<<endl;
    return 0;
}

标签:gcd,运算,意义,qquad,times,Delta,ax,mod
From: https://www.cnblogs.com/xushengxiang/p/16656353.html

相关文章

  • 第一章节03 运算符
    第一章节03运算符主要感受前4个就可以了有比更高级的类型运算的结果就是更高级的类型,否则都是int类型,因为结果的值默认是int关于逻辑运算存在一种短路运算inta......
  • JavaScript 非运算(!)之双感叹号的使用技巧
    我的另一篇博文中提到JavaScript有哪些是假值,哪些是真值。对于null、undefined、"",等一些假值,JavaScript直接视为false。我有一个需求,判断从浏览器中获取的Cookie是......
  • 运算符
    1算术运算符:+-*/%(取余,又叫模)++--2赋值运算符=3关系运算符:><>=<===!=instanceof4逻辑运算符&&(与)||(或)!(非)5位运算符:&|^~>><<>>>6条件运算......
  • 类和对象-运算符重载
    运算符重载运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型4.5.1加号运算符重载作用:实现两个自定义数据类型相加的运算  成员函......
  • 1.3(1) 空间向量及其运算的坐标表示
    \({\color{Red}{欢迎到学科网下载资料学习}}\)【基础过关系列】2022-2023学年高二数学上学期同步知识点剖析精品讲义(人教A版2019)\({\color{Red}{跟贵哥学数学,so\qua......
  • 工具类--精确的浮点数运算
    importjava.math.BigDecimal;importjava.math.RoundingMode;/***精确的浮点数运算**/publicclassArith{/**默认除法运算精度*/privatestati......
  • G. Even-Odd XOR(构造 位运算) CF 1722G
    题目:​构造一个长度为n的序列,使奇数位上的所有数异或和等于偶数位上的所有数异或和分析:​由于奇数位异或和=偶数位异或和,所以可以得到奇数位异或和xor偶数位异或和=......
  • 矩阵运算常用性质
    以下内容是把这里的结论整理了一下。矩阵乘法已知\(\mathbf{C}=\mathbf{A}\mathbf{B}\),则:\[\mathbf{C}^T=\mathbf{B}^T\mathbf{A}^T\]已知\(\mathbf{C}=\mathbf{......
  • C/C++中的自增自减运算符的前置后置问题
    前言在准备秋招的过程中,遇到双指针问题,发现自增自减运算符的前后置对于问题的解决有很大的影响,故写此文作为总结,方便后续查阅。正文一、前置后置的区别自增自减操作符......
  • A100和H100两款NVIDIA顶级双精度浮点数矢量运算芯片被限制对华出口——警醒
    美国东部时间8月31日,NVIDIA公司宣布收到美政府通知停止对中国出口A100和H100两款NVIDIA顶级双精度浮点数矢量运算芯片,并且未来计算性能和数据传输性能高于A100的芯片都将禁......