模n运算

注意:只是个人理解,可能有不正确的地方

对于整数a、n,模n运算就是求a除以n的余数

如果a=10,n=3,那么a除以n的商为3,余数为1

C语言等编程语言中常使用%代表求模运算:a%n

10%3=1

英文中也使用mod代表求模运算:a mod n

10 mod 3 = 1


模n运算的加法:

(a+b)%n = (a%n + b%n)%n

 

模n运算的减法:

(a-b)%n = (a%n - b%n)%n


模n运算的乘法:

(a*b)%n = (a*(b%n))%n = ((a%n)*b)%n = ((a%n)*(b%n))%n


模n运算的乘方:

(a^b)%n = ((a%n)^b)%n

(((a^b)%n)*((a^c)%n))%n = ((((a%n)^b)%n)*(((a%n)^c)%n))%n = ((a%n)^b)*(a%n)^c))%n = ((a%n)^(b+c))%n = (a^(b+c))%n


将模n运算中的加减乘运算抽象化:

如果将上面等式中的%n从等式中略去,然后使用(mod n)方式标在等式后,以表明该计算不是普通的加减乘等运算,是基于模n的运算,则各运算可以写作:

a+b = a+b  (mod n)

a-b = a-b  (mod n)

a*b = a*b  (mod n)

a^b = a^b  (mod n)

(a^b)*(a^c) = a^(b+c)  (mod n)

这样就得到了基于模n的加减乘运算。

b^(-1)的定义

对于普通乘法,b*b^(-1)=1,那么基于模n的b^(-1)应该满足:

b*b^(-1)=1  (mod n)

由(2*5)%3=1可以看出

2^(-1) = 5  (mod 3)

5^(-1) = 2  (mod 3)

由(2*2)%3=1可以看出

2^(-1) = 2  (mod 3)

可以看出b^(-1)是一系列数,但通常只取<n的值

b^(-1)也称为b关于n的模反元素

由b^(-1)定义,可以得到抽象化的基于模n的除法

a/b = a*(b^(-1))  (mod n) 


转载于:https://my.oschina.net/u/1382972/blog/335126

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求一个n的逆元,可以使用扩展欧几里得算法来求解。步骤如下: 1. 首先判断数n是否为质数,如果n为质数,则可以使用费马小定理来计算n的逆元。费马小定理是:a^(n-1) ≡ 1 (mod n),则a的逆元为a^(n-2) (mod n)。 2. 如果n不是质数,则需要使用扩展欧几里得算法来求解。扩展欧几里得算法可以求出两个整数a和b的最大公约数gcd(a,b),并且可以求出一组整数x和y,使得ax + by = gcd(a,b)。 3. 在n的意义下,如果a和n互质,则可以使用扩展欧几里得算法求出a在n意义下的逆元x。具体地,如果gcd(a,n) = 1,则ax ≡ 1 (mod n),则可以求出一个整数x,使得ax + ny = 1,因此x就是a在n意义下的逆元。 4. 如果a和n不互质,则a在n意义下没有逆元。因此,需要判断a和n是否互质。 下面是一个使用扩展欧几里得算法求解n的逆元的C语言程序: ```c int mod_inverse(int a, int n) { int gcd = gcd_extended(a, n); if (gcd != 1) { // a和n不互质,a在n意义下没有逆元 return -1; } else { // a在n意义下的逆元 int x = (x % n + n) % n; // 处理负数情况 return x; } } int gcd_extended(int a, int b, int *x, int *y) { if (a == 0) { *x = 0; *y = 1; return b; } int x1, y1; int gcd = gcd_extended(b % a, a, &x1, &y1); *x = y1 - (b / a) * x1; *y = x1; return gcd; } ``` 其中,gcd_extended函数是扩展欧几里得算法的实现,mod_inverse函数使用扩展欧几里得算法求解n的逆元。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值