精华内容
下载资源
问答
  • 模运算
    2021-04-19 21:51:40
    更多相关内容
  • 易语言大数幂模运算

    2020-07-23 00:32:26
    易语言大数幂模运算源码,大数幂模运算
  • 模运算与奇偶数判断

    2021-01-08 06:28:14
    模运算 如果N整除 A – B,那么我们就说A与B模N同余(congruent),记为A≡B(modN)A \equiv B\pmod{N}A≡B(modN)直观地看,这意味着无论A还是B被N去除,所得余数都是相同的。于是,81≡61≡1(modN)81 \equiv 61 \equiv...
  • 补码,模运算和溢出

    2021-07-26 03:51:37
    在现代计算机中,补码主要用来表示整数(数值整数),CPU在补码的基础上实现加法运算,减法也通过加法来实现(Intel x86的CPU中,都有加法器和乘法器,用加法器实现减法,用乘法器实现除法;...在模运算系统中,若A,...

    在现代计算机中,补码主要用来表示整数(数值整数),CPU在补码的基础上实现加法运算,减法也通过加法来实现(Intel x86的CPU中,都有加法器和乘法器,用加法器实现减法,用乘法器实现除法;当然,某些高级CPU还可能会有更先进的计算部件,一个指令直接进行\(\sin\)和\(\cos\)等计算)。本文总结补码相关知识。

    先说说模运算(mod):

    模可以理解为一个正数,一个上界。在模运算系统中,若A,B,M满足这个关系:\(A=B+K \times M\),K为整数,则记为:\(A \equiv B \pmod M\)。即A,B各除以M后的余数相同,故称B和A为模M同余。也就是说在一个模运算系统中,一个数与它除以模后得到的余数是等价的(这里没有考虑负数)。时钟系统,就是最典型的模运算系统,模是12或24。

    补码跟模运算啥关系:

    假设现在钟表时间是10点,要将它拨到6点,有两种拨法:

    1, 倒拨4个小时;

    2, 顺拨8个小时;

    所以,在模12系统中,\(10-4 \pmod {12} \equiv 10+8 \pmod {12}\)

    上式也可以写为:\(-4 \equiv 8 \pmod {12}\)

    于是,我们可以说,8是-4对模12的补码。

    结论:对于某一个确定的模,某数A减去小于模的另一个数B,可以用A加上(-B)的补码来代替!

    这就是为什么补码可以借助加法运算实现减法运算的道理。

    补码的定义

    1, 正数的补码就是它本身;

    2, 负数的补码等于模与该负数绝对值之差。

    (如果计算之后还是负数,继续迭代,比如:\(-7 \pmod 3 \equiv 2\))

    因此,某一个数的补码,不管它是正是负,其补码都是正数!

    在计算机中,一般情况下,一个整数由\(n=32\)bit位来表示,正好有符号整数在现代计算机中基本都使用补码来表示。对于有符号的整数,第一位是符号位,那么,有符号整数的模就是\(2^n\)。(n-1个bit的有效数据,模就是2的n次方)

    我们定义:

    1, 对于n为有符号整数定点整数(小数点在最右边),补码为:

    \([X_T]_{补}=(X_T+2^n) \pmod {2^n}\)

    \((-2^n \le X_T \lt 2^n)\)

    2, 定点小数(小数点在最左边),补码为:

    \([X_T]_{补}=(X_T+2) \pmod {2}\)

    \((-1 \le X_T \lt 1)\)

    从上面定义可以很容易的看出,有效位全0时的补码表示的是负的最小值,因此对于8bit的有符号数,表示范围是-128到127.

    补码0的表示是唯一的,机器数表示,不管是定点整数,还是定点小数,都是全0。这样带来了两个好处:

    1, 0的表示唯一,减少了+0和-0之间的转换;

    2, 少占用一个编码表示,使补码比原码能多表示一个最小负数。

    补码的计算

    可以通过定义证明补码在计算机中的计算规则:对于正数,符号位是0,补码就是其本身,无需计算;对于负数,符号位保持1,其余各位由真值的数值部分“各位取反,末尾加1”得到。

    计算机来做取反很easy,再加上1,就能的负数的补码,因此,可以很容易地将减法转换成加法运算。(如果用原码表示负数,计算过程就会复杂许多)

    反过来看看,如果从补码来反算出真值:

    对于正数,补码的数值部分不做改变,跟原码一样,直接就能得到真值;

    对于负数,将计算补码的过程反过来,将补码数值部分减1,然后再各位取反,符号位保持1。

    再看看如何从\([X_T]_{补}\)求出\([-X_T]_{补}\):

    还是“各位取反,末尾加1”,但是这次要连通符号位一起取反。

    需要注意的是:最小负数取负后的补码表示是不存在的,如果对最小负数取负数,结果会溢出。

    关于溢出(overflow)

    确定位数的两个数的计算结果,有可能无法在同样的位数范围内表示出来,这时就发生了溢出。溢出的发生是因为产生了进位,而计算机由于存储限制,进位会被丢弃。

    有的时候,这种丢弃是允许的,比如两个相同符号数相减,或者两个异号数相加。这时的溢出,恰好就是模运算,最后得到的结果正确。前面说到,如果对最小负数取负,结果会溢出,机器数的结果是没有变化。程序员需要特别注意。

    有的计算机采用一种双符号位的补码表示,成为变形补码,也称为模4补码。在这种补码系统中,左符号是真正的符号位,右符号用来判别溢出。

    无符号编码

    有符号整数在计算机内,使用补码表示,因为这样减法和转换成加法,加快CPU的计算;

    无符号整数在计算机内,有一种说法,使用无符号编码表示,其实就是原码表示,简单直接。

    C语言中,要特别注意有符号数和无符号数混合运算的情况,系统会默认将有符号数也当成无符号数来对待,计算结果也是无符号数。

    无符号编码在计算时,也会有溢出。

    展开全文
  • 在本文中,我们讨论了线性有序集上的模糊真值的一般二元运算的t范数展开操作,其中单位间隔和实数设置为特例。 在此基础上,讨论了2型模糊集的t范运算和2型模糊数的性质。
  • 模运算公式整理

    千次阅读 2021-02-09 22:33:39
    整理ACM中常用的模运算公式,包括加减乘除、幂运算。

    数论 - 模运算

    加减乘除

    (个人习惯, m o d mod mod 表示用来取模的数。)

    加法: ( a + b ) % m o d = ( a % m o d + b % m o d ) % m o d (a+b) \% mod = (a \%mod + b\%mod)\%mod (a+b)%mod=(a%mod+b%mod)%mod

    减法: ( a − b ) % m o d = ( a % m o d − b % m o d ) % m o d (a-b) \% mod = (a \%mod - b\%mod)\%mod (ab)%mod=(a%modb%mod)%mod

    乘法: a × b % m o d = ( a % m o d × b % m o d ) % m o d a \times b \%mod=(a\%mod\times b\%mod)\%mod a×b%mod=(a%mod×b%mod)%mod

    除法:

    • 可以用逆元:

      • b a % m o d = b × a m o d − 2 % m o d \frac ba\%mod=b\times a^{mod-2}\%mod ab%mod=b×amod2%mod,其中 m o d mod mod 为素数(根据费马小定理)。
      • b a % m o d = b × a ϕ ( m o d ) − 1 % m o d \frac ba\%mod=b \times a^{\phi(mod)-1}\%mod ab%mod=b×aϕ(mod)1%mod,其中 a a a m o d mod mod 互质(根据欧拉定理)。但也可以由欧拉函数的性质推出, a ϕ ( m o d ) − 1 a^{\phi(mod)-1} aϕ(mod)1 = a m o d − 1 − 1 =a^{mod-1-1} =amod11 = a m o d − 2 =a^{mod-2} =amod2
    • 不能用逆元: b a % m o d = a % m o d × b b \frac ba\%mod=\frac {a\%mod\times b}{b} ab%mod=ba%mod×b

      • 证明:
        a b m o d    k = d a b = k x + d a = k b x + b d a m o d    k b = b d a m o d    k b b = d \frac ab\mod k = d \\ \frac ab=kx+d\\ a=kbx+bd\\ a\mod kb=bd\\ \frac {a \mod kb}{b}=d bamodk=dba=kx+da=kbx+bdamodkb=bdbamodkb=d

    板子如下:

    LL qm (LL a, LL b ,LL c){  //要取模
        LL res = 1;
        while(b){
            if(b & 1)
                res = res * a % c;
            a = a * a % c;
            b = b >> 1;
        }
        return res;
    }
    LL inv(LL x) {return qm(x, mod - 2, mod);}
    //四种取模运算
    LL add(LL x, LL y) {return (x % mod + y % mod) % mod;}
    LL sub(LL x, LL y) {return (x % mod - y % mod) % mod;}
    LL mul(LL x, LL y) {return x * y % mod;}
    LL div_1(LL x, LL y) {return x * inv(y) % mod;}  //可以求逆元的情况
    LL div_2(LL x, LL y) {return x % mod * y / y;}  //不能求逆元的情况
    

    幂运算

    欧拉降幂。
    a b % p = { a b % ϕ ( p ) % p g c d ( a , p ) = 1 a b % p g c d ( a , p ) ≠ 1 , b < ϕ ( p ) a b % ϕ ( p ) + ϕ ( p ) % p g c d ( a , p ) ≠ 1 , b ≥ ϕ ( p ) a^b\%p=\left\{ \begin{aligned} &a^{b\%\phi(p)}\%p& \quad gcd(a,p)=1\\ &a^b\%p& \quad gcd(a,p) \neq1,b<\phi(p)\\ &a^{b\%\phi(p)+\phi(p)}\%p& \quad gcd(a,p) \neq1,b\ge\phi(p)\\ \end{aligned} \right . ab%p=ab%ϕ(p)%pab%pab%ϕ(p)+ϕ(p)%pgcd(a,p)=1gcd(a,p)=1,b<ϕ(p)gcd(a,p)=1,bϕ(p)

    此处仅给出第三种情况(常用)的代码。

    LL qm(LL a, LL b, LL c) {
        LL res = 1;
        while (b) {
            if (b & 1) res = res * a % c;
            a = a * a % c;
            b >>= 1;
        }
        return res;
    }
    
    LL jm(LL a, LL b) {  //欧拉降幂
        LL mi = b % phi(mod) + phi(mod);
        return qm(a, mi, mod);
    }
    
    展开全文
  • Python中的模运算

    千次阅读 2021-01-12 20:46:59
    所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得$ a = n * b + m $,那么$ a \% b = a - n * b = m $。...

    所谓取模运算,就是计算两个数相除之后的余数,符号是%。如a % b就是计算a除以b的余数。用数学语言来描述,就是如果存在整数n和m,其中0 <= m < b,使得$ a = n * b + m $,那么$ a \% b = a - n * b = m $。

    先测试几个例子:

    print(9%5) # 4

    print(-9%5) # 1

    print(9%-5) # -1

    print(-9%-5) # -4

    可以看到,数值部分虽然相同,但是正负符号的四种不同组合,会产生完全不同的四种结果。那么这里面有什么规律吗?

    实际上,虽然结果不一样,不过取模运算完全遵从统一的规则:

    其中$\lfloor\frac{a}{b}\rfloor$表示a除以b的结果向下取整。

    比如$9\%5$,先计算$\lfloor\frac{9}{5}\rfloor$,向下取整得到1,然后计算$9-1*5$,得到4;

    同理$-9\%5$,先计算$\lfloor\frac{-9}{5}\rfloor$,向下取整得到-2,然后计算$-9-(-2*5)$,得到1;

    再来看$9\%-5$:

    最后是$-9\%-5$:

    虽然知道结果是如何计算出来的,不过人脑不比电脑,这样计算未免太复杂,为避免给大脑增加负担,再根据上面的规则,这里我总结了一个简单的记忆方法:

    对于不带负号的,2个数字都是正数的,直接求结果,这个应该来说是比较简单的,而且无论符号是什么,我们都只计算这个值;

    对于有负号的,不管负号在哪个数字,都去除负号,然后计算步骤1的结果;

    接下来根据负号的位置分为3种情况,假设除数是K,去掉负号后取模的结果是M:2个数都是负数,直接等于-M

    被除数是负数,除数是正数,由于是向下舍入,最后相当于会多加上一个K,也就是说模一定是大于0的,结果是K-M

    被除数是正数,除数是负数,刚好相反,结果是M-K,注意这里的K是除数的绝对值,是正数

    简单归纳:

    不管有没有负数,先按正数求模得到M

    2个数都为负数,结果是-M

    只有1个数为负数,负数在上,记住结果一定是正的,大数-小数(除数-余数),那么就是K-M

    只有1个数为负数,负数在下,记住结果一定是负的,小数-大数(余数-除数),那么就是M-K

    注:此规律的前提是除的结果一定是向下取整,如果你用java去套这个规律会发现完全行不通。

    展开全文
  • 常用的模运算

    千次阅读 2019-09-23 09:39:09
    模运算 对于正整数和整数 , ,定义如下运算: 取模运算:a % p(或a mod p),表示a除以p的余数。 模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r。 模p减法:...
  • 数字图像处理——图像基本运算——邻域概念 & 模板运算 1、邻点及邻域 点运算是对图像中每个像素点进行运算,其他点的值不会影响到该像素点,如图像的几何变换、灰度级变换等; 简单结说:相邻像素构成邻域,...
  • 模运算(带例题详解)

    千次阅读 2020-12-06 12:12:01
    模运算 基本规则 模运算的基本规则与四则运算基本一致: (a + b) % p = (a % p + b % p) % p (a – b) % p = (a % p – b % p) % p (a * b) % p = (a % p * b % p) % p (a^b) % p = ((a % p)^b) % p 这里...
  • 模运算 详解

    千次阅读 2019-10-28 20:30:34
    模运算 模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,可以把它取模后缩小数值在输出。 定义模运算为 a 除以 m 的余数,记为: a mod m = a % m 取模的结果满足 0 <= a mod ...
  • 模运算(mod)

    千次阅读 2021-11-20 18:57:30
    模运算: 同余式:正整数a,b对p取模,它们的余数相同,记做 或者a ≡ b (mod p)。 n % p 得到结果的正负由被除数n决定,与p无关。 例如:7%4 = 3, -7%4 = -3, 7%-4 = 3, -7%-4 =-3。 运算规则 (a + b) % ...
  • C++模运算

    2021-08-22 10:15:23
    定义“取模”运算:对于正整数 a 和 p,a % p 表示 a 除以 p 的余数,又称“运算。现在,输入三个正整数 b、p、k,请编程计算 b^p % k 的值。 输入格式 一行三个正整数,分别表示 b、p、k 的值。 输出格式 一行...
  • 为以较小的面积代价实现 RSA公钥密码算法及其他一些算法所需的求模、模加、模乘、模幂等运算,该文设计了一种可作为协处理器使用的模运算处理器。运算数据的长度可变,范围从 256b到 2048b。采用优化的 CIOS ...
  • 模运算及其性质

    千次阅读 2020-01-12 23:26:10
    本文以c++语言为载体,对基本的模运算应用进行了分析和程序设计,以理论和实际相结合的方法向大家介绍模运算的基本应用。。 原文:https://blog.csdn.net/cckit/article/details/41629263 基本理论 一、基本概念...
  • 模运算与取余运算的区别

    千次阅读 2020-12-08 12:57:45
    模运算与求余 首先,“模运算”与“求余运算”都是求取除法中产生的“余数”。比如 “7÷3”产生的余数就是1,所以无论对7和3采用“模运算”还是“求余运算”,得到的结果都是 1 。这也就是为什么我们在学习程序设计...
  • 离散 模运算

    千次阅读 2019-08-31 20:05:58
    n加法 两数进行普通加法后,对和进行取余,n乘法 两数进行普通乘法后,对积进行取余,, ▫ > ▫是n加法 G={0,1,2,3,4,...,n-1} 加法有幺元:0,并且每个元素都有逆元;, * > *是n乘法 G={1,2,3,4,...,n-1}...
  • 【数论基础】模运算详解及其应用

    千次阅读 2020-03-01 12:17:13
    基本理论 基本概念: 给定一个正整数p,任意一个整数n,一定存在等式 n=kp+rn = kp + rn=kp+r   其中k、rk、rk、r是整数,且 0≤r<p0 ≤ r <...取模运算:a%p(或amodp)a \% p(或a mod p)a...
  • 易语言大数幂模运算源码
  • 模运算法则

    2018-08-25 20:25:56
    模运算与基本四则运算有些相似,但是除法例外。其规则如下:  (a + b) % p = (a % p + b % p) % p  (a - b) % p = (a % p - b % p) % p  (a * b) % p = (a % p * b % p) % p  (a^b) % p = ((a % p)^b) % p 推论...
  • 模运算与同余关系

    千次阅读 2021-07-16 12:49:11
    文章目录一、模运算1.通用定义2.关于包含负数的模运算二、同余关系1.定义2.同余类(剩余类)3.完全剩余系 、简化剩余系(既约剩余系/缩系)4.带模运算性质5.同余式性质6.余数之和 一、模运算 1.通用定义 如果a 与d...
  • 模运算:满足分配率

    2021-03-18 19:01:38
    因此,pow(a,b)%m可以写成: typedef long long LL; LL pow (LL a,LL b,LL m){ LL ans = 1; for (int i = 0;i < b;i++){ ans = ans * a % m; } return ans; }
  • 模运算和欧几里得算法Affine Cipher模运算Greatest Common Divisor (GCD) 最大公约数欧几里得的GCD算法Reference Affine Cipher Affine Cipher是基于模运算的一种cipher,其公式为: Y = aX + b mod m Secret key: ...
  • 两个数进行相加操作或者相乘后取模操作,存在溢出的可能。我们需要在计算中避免这样的情况。 下面是两个常用的操作: ...2 模运算避免溢出 // 原语句 (a * b) % m // 更改后的语句 (a % m) * (b % m) % m ...
  • 模运算的运算法则及逆元的计算

    千次阅读 2019-11-03 14:30:21
    模运算与基本四则运算有些相似,但是除法例外。其规则如下: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p (a^b) % p = ((a % p)^b) % p 推论: 若a≡b...
  • 针对安全密文索引建立问题, 基于AES加密和模运算, 提出了一种循环分区索引方案。该方案的索引由客户端对属性值进行AES加密和模运算得到, 具有部分保序的性质。在有效支持范围查询的同时, 该方案明显降低了等值查询时...
  • 针对安全密文索引建立问题, 基于AES加密和模运算, 提出了一种循环分区索引方案。该方案的索引由客户端对属性值进行AES加密和模运算得到, 具有部分保序的性质。在有效支持范围查询的同时, 该方案明显降低了等值查询时...
  • System.out.println("该程序是计算对于A的模P平方根的计算方法,A和P要求用户输入,其中P必须是素数。"); System.out.println("即求解二次同余式:x^2和A模P(x^2=a(mod p))同余式的解,");...以及大数模运算
  • 这里是用平方-乘积的办法简化模运算

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 504,715
精华内容 201,886
关键字:

模运算

友情链接: PV.rar