今昔表明c=n++时,1.当m是素数的时候710官方网站

对于(a/b)%m==?

2.2.1 表明加法结合律:对私行的自然数a,b,c,(a+b)+c = a+(b+c).
用数学总结法注脚:
c=0时,(a+b)+0 = a+b (依照引理2.2.2)
a+(b+0) = a+b
假设当c=n时,等式(a+b)+n= a+(b+n)制造,未来验证c=n++时,等式(a+b)+(n++)=
a+(b+(n++))也树立
(a+b)+(n++)=(n++)+(a+b)=(n+(a+b))++=((a+b)+n)++
a+(b+(n++))=a+((n+b)++))=a+((b+n)++))=
((b+n)++))+a=((b+n)+a)++=(a+(b+n))++
由于(a+b)+n= a+(b+n)
所以((a+b)+n)++=(a+(b+n))++,即(a+b)+(n++)= a+(b+(n++))

1. 问题

1.当m是素数的时候,依据费马小定理,直接出口b^(n-2)就能够

2.2.2 若a是正数,证明恰存在三个本来数b,使得b++=a.
使用数学总结法
当a=1时(是如此么?),1=0++,依照公理4,仅存在b=0
尽管a=n时,恰存在自然数b使b++=n
当a=n++时,n++=(b++)++,一样基于公理4,仅设有自然数b++使等式创制。
(也便是说,任何叁个不为0的自然数一定是有个别自然数的后继。只依照公理3能得出如果二个数不是其他自然数的后继它正是0吗?)

大家掌握,在Computer中是用补码来寄放在实际的正负数的,那么计算机为何要用补码来寄放数据,计算机教材中,那多少个补码
= 反码 + 1的公式又是怎么来的?

2.否则,扩大欧几里得exgcd(b,m,x,y)

2.2.3 自然数的序的着力属性
(a) 序是自反的:a>=a.
表明:a = a + 0,即存在自然数n = 0使 a = a + n

要询问那个难题的答案,大家先要精通一些中央的知识,最中央的同余公式这里就不讲了,看本帖在此以前必要去离散数学或数论中询问下大旨的同余运算就可以。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 int a,b,m;
 7 int x,y;
 8 int exgcd(int a,int b,int &x,int &y)
 9 {
10     if(b==0)
11     {
12         x=1;
13         y=0;
14         return a;
15     }
16     int r=exgcd(b,a%b,x,y);
17     int tmp=x;
18     x=y;
19     y=tmp-a/b*y;
20     return r;
21 }
22 int fastpow(int a,int p)
23 {
24     int base=a;int ans=1;
25     while(p!=0)
26     {
27         if(p%2==1)ans=ans*base;
28         base=base*base;
29         p=p/2;
30     }
31     return ans;
32 }
33 int main()
34 {
35     scanf("%d%d%d",&a,&b,&m);
36     for(int i=1;i<=sqrt(m);i++)
37     {
38         if(m%i==0)
39         {
40             int ans=exgcd(b,m,x,y);
41             printf("%d",(a*ans)%m);
42             return 0;    
43         }
44     }
45     printf("%d",fastpow(b,m-2));
46 }

(b) 序是传递的: 若 a>=b 且 b>=c, 则 a>=c
评释: a>=b, 那么存在自然数m使得 a = b + m
b>=c, 那么存在自然数n使得 b = c + n
a = b + m = c + n + m = c + (n + m) , n + m 为自然数(根据加法的定
义),即 a >= c
(c)序是不予称的: 若a>=b 且 b>=a, 则 a=b
证明: a = b + m
b = a + n
a = a + n + m = a + (n + m)
a = a + 0 = a + (n + m )
据悉加法结合律和命题2.2.6有 n + m = 0
若 n != 0, m = 0, 则 n + m = n + 0 = n != 0, 与 n + m = 0矛盾
若 n = 0, m != 0, 则 n + m = 0 + m = m != 0, 与 n + m = 0矛盾
若 n != 0, m != 0,则基于加法的概念,n + m 必为有些自然数的后继,而
n + m = 0 不为任何自然数的后继,所以如故争辨
所以 n = 0, m = 0
即 a = b
(d) 加法保序: a >= b 当且仅当 a + c >= b + c
证明:(1) 先证 a >= b时, a + c >= b + c
存在自然数 m 使a = b + m, a + c = b + m + c = b + c + m
即 a + c >= b + c
(2) 再证 a + c >= b + c时, a >= b
留存自然数n 使得 a + c = b + c + n, 依据命题2.2.6有
a = b + n, 即 a >= b
(e) a < b 当且仅当 a++ <= b.
注明: (1) a < b ,则 存在自然数m , b = a + m且 b != a, 由反正法知 m
!= 0,
那正是说 m 必为 某一自然数n 的后继 即 m = n++ (遵照习题2.2.2)
则有 b = a + (n++) ,依据预计 n++ = n + 1 可获取
b = a + (n + 1) = a + (1 + n) = ( a + 1) + n = (a++) + n,即 a++ <=
b
(2) a++<=b, 则 存在自然数m使b = (a++) + m
b = (a++) + m = a + 1 + m = a + (m++)
凭借公里3有 m++ != 0, 则 b != a 也就是 a < b
(f) a < b 当且仅当对于某正数d,b = a + d
证实: (1)a < b, 存在自然数m 使得 b = a + m且b != a, 由反正法知 m
!= 0
也等于m是正数,则设有正数d 使得 b = a + d
(2) b = a + d ,若d 为某正数即 d != 0,相当于说 b != a, 那么 a < b

 

 

2. 管理器的字长和同余总计

Computer的字长是指Computer运算时,能寄放的最大数字的的位长,如大家常说的三十五个人机,字长正是三拾贰个人的,寄放器独有32bit,最多能放三十一个1,能发布的最大数字正是232

  • 1

当赶过这几个数字后,由于无法积攒,会被计算机遗弃,同期会安装CPU的溢出标记位,那正是所谓的溢出

为了轻易,大家用8位机来做示范,即最大能代表的数字是28 – 1

记m = 28

由此,Computer的总计 (a + b)时,实际上总结的是 (a + b) % m (mod
m),超越m的有个别都会被打消,只取余数的有的,即计算机中的总计实际都以八个模m的同余总结

如 1000 0000 + 1000 0001 = 1 0000
0001

出于最高位胜出最大能够代表的数,多出的位将溢出遗弃,所以最后的结果为
0000 0001 = 1

 

3. 补码的概念和计量

设m > b >= 0,b为整数

则b的补 b = m – b
(注意,这里定义的是补,并非补码,不要弄混了)

出于有正负数,Computer中对正负数的补码进行了差别定义:

1>
正整数b的补码为本身,即b的补码仍为b

2> 负整数-b的补码为b的补,即b

大家清楚,a – b就能够转接为 a + (-b),借使用补码来运算

a – b = a + (-b)  (mod m) 在Computer中总括的是 a + b  (mod m)

那就是说她们的同余吗(即他们模m后的值特别吗)?

∵ b = m – b

∴ a + b = a + (m – b)

          ≡ a – b (mod m)

∴ 将负数转化为补码实行测算后,如故是建设构造的

因此,计算机中用补码来囤积全体的数后,就无需追加减法器了,用加法器就足以代替计算减法,那样能省掉电路设计,当然,那还只是内部的二个低价之一

 

4. 负数的象征和平运动算

眼下讲了微型Computer中用补码来积存数字,大家清楚,在8位机中,-1的补码为 1111
1111 =
255,那么在8位机中,那些数字即能够代表是-1的补码,也能够表示是255的补码,那就产生一个冲突了。

为了减轻这种争辩,Computer中,从可用的8位中挪用了一个最高位来差距正负数,即当最高位为1时,该数为负数,为0则象征正数

那般,由于最高位被挪用,8位机在表示正负数时,就独有7位有效数字了,设m2
= 27 = 1000 0000 = 28 / 2 = m/2

正负数仍用低7位的补码来表示,此时的模要换来m2了。

如-1,1模m2的补码为 (m2-1) = 0111
1111,然后将最高职位为1,最后在Computer中表示为: 1111 1111(即oxFF)

710官方网站 1

710官方网站 2

 

那时候,我们前边定义的补码还会有用吗?运算的规律还必要改换呢?

1> a + b

当 a + b 小于 m2时,不会向符号位进位,所以结果正是 a +
b,没难点

当2个正整数相加大于或等于m2时,就能向最高位进位,这时相对m2来讲是溢出了,最高位会变为1,即(a+b)最后会获得一个负的结果,这一个结果是空虚的,所以总括时要留神结果是或不是溢出

测验代码:

710官方网站 3

安装带符号和10进制呈现:

710官方网站 4

测量检验结果:

从图中得以见到,100 + 100 = 200 = 0xC8 =1100 一千 = –56

由于总结溢出,明显-56不是我们想要的结果

 

2> a + (–b)

当加上二个负数时,-b在Computer中的带符号的补码表示为: m2 +
(m2 – b) = 2m2 – b = m – b   (m2 =
1000 0000,任何低于m2的数增进m2就一定于将其标记位变为1)

∴ a – b = a + (m – b)

         ≡ a – b (mod m)

即带符号的补码在负数运算中,依旧有效

但有个问号,假若 a > b, a-b 为正数,计算停止后符号位应该是0,当a
< b时,a-b 为负数, 符号位应该是1,景况是那般的啊?

4.2.1 当 a > b时

∵ a < m2

∴ a – b < m2 – b < m2

∴ (a – b)不会超越m2,即不会溢出到符号位,符号位仍会为0

4.2.2 当  a < b时

a – b ≡ m + a – b  (mod m)

       ≡ 2m2 + a – b   (mod m)

       ≡ (m2 – b) + m2  + a   (mod m)

∵ m2 >  b

∴ (m2 – b) > 0

m > (m2 – b) + m2  + a > m2 

∴ a < b时,一定会向符号位溢出,即符号为自然会产生1

同时,a –
b ≡ a – b (mod m2)

∴ 溢出后,低7位的数与a-b仍是同余的

据此,带符号位的补码运算,仍和不带符号位的补码运算法则平等,计算时将标记位带入总计,结果依旧同样,那样补码的第1个低价就出去了,即意味着带符号的企图时,不用关注符号位。

 

4.2.3 当 a == b时,以及a和b中有0的情况

本条情况很简短了,就不表达了

 

5. 补码和反码

那么哪些求贰个数的补码呢,正数没难点,正是自个儿,但负数呢,上边已有简要的公式
–b → b = m – b,
但这里必要用到减法计算,而为了节省电路设计,大家用补码是为了节约减法器的,那就抵触了,咋办?

看过书的同学早就知晓,用反码来总计 : 补码 = 反码 + 1

以此公式怎么着来的:

1> 反码的概念

咱俩精通,反码就是讲原来为0的位变为1, 为1的位变为0,

咱俩也理解贰个成团加上其反,就十一分全集

即b + ~b = 1111 1111 = 28 – 1 =
m – 1

∴ m = b + ~b + 1

∴ b = m – b = (b + ~b + 1) – b =
~b + 1

那便是补码运算的著名公式的根源

相关文章