首页 > 其他分享 >基础数论 模运算与逆元

基础数论 模运算与逆元

时间:2024-07-26 19:39:22浏览次数:9  
标签:frac 运算 数论 bmod times 逆元 therefore equiv

模运算与逆元:

取模定义:

\[a\bmod n\begin{cases} a-\lfloor\frac{a}{n}\rfloor\times n \ \ \ \ \ a\geq0\\ -(-a\bmod n)\ \ \ a<0 \end{cases} \]

 

取模基本性质:

设 \(a_0=a\bmod n,b_0=b\bmod n\)

  • \((a+b)\bmod n=((a\bmod n)+(b\bmod n))\bmod n\)

​ \(a+b\equiv a_0+b_0(\bmod n)\)

  • \((a\times b)\bmod n=((a\bmod n)\times (b\bmod n))\bmod n\)

    \(a\times b\equiv a_0\times b_0(\bmod n)\)

  • 对于任意正整数 \(k\) ,有 \(a\bmod n=(a\bmod kn)\bmod n\)

  • 若 \(k \mid a\)​,有 \(\frac{a}{k}\ mod\ n=\frac{a\ \bmod \ kn}{k}\)

设 \(\frac{a}{k}=x\) ,

\[x-\lfloor\frac{x}{n}\rfloor\times n=\frac{xk-\lfloor\frac{xk}{kn}\rfloor\times kn}{k} \]

 

同余:

若整数 \(a,b\) 除以正整数 \(m\) 的余数相等,则称 \(a,b\) 模 \(m\) 同余,记为 \(a\equiv b (\bmod m)\)

逆元:

设 \(a\) 为整数,\(n\) 为正整数,若整数 \(b\) 满足,\(ab\equiv 1(\bmod n)\),则称 \(b\) 为 \(a\) 模 \(n\)​ 的逆元。

  • 当且仅当 \(\gcd(a,n)=1\) 时, \(a\) 模 \(n\) 的逆元存在。
  • 如果 \(b_1,b_2\) 为 \(a\) 模 \(n\) 的逆元,则必有 \(b_1\equiv b_2(\bmod n)\) ,即 \(a\) 模 \(n\) 的逆元在模 \(n\) 意义下唯一。

由于 \(a\) 的逆元唯一,可记为 \(a^{-1}\) 或 \(\frac{1}{n}\) 。可以定义 \(\frac{1}{a}\bmod n\)为 \(a\) 模 \(n\) 的逆元中绝对值最小的数,并取与 \(a\)​ 相同的符号。

 

费马小定理:

对于质数 \(p\) 和任意整数 \(a\) ,若 \({\rm gcd}(a,p)=1\) ,则 \(a^p\equiv a (\bmod p)\)

设有数列 \(S=\{1,2,3,\cdots,p-1\},S\bmod p=S\)

则 \(S \times a = a,2a,3a,\cdots,(p-1)a\)

\(\therefore (S\times a\bmod p=(S\bmod p\times\ a\bmod p)\bmod p\)​ \(({\rm gcd}(a,p)=1)\)

\(\therefore\) 上式\(=S\times (a\bmod p)\) 而 \({\rm gcd}(p,a\bmod p)=1\)

\(\therefore \prod_{i=1}^{p-1}i\equiv \prod_{i=1}^{p-1}a\times i\ (\bmod p)\)

\(\therefore (p-1)!\equiv a^{p-1}\times (p-1)!(\bmod p)\)

\(\therefore 1\equiv a^{p-1}(\bmod p)\)
\(\therefore a\equiv a^p(\bmod p)\)

 

求逆元:

若 \(p\) 为质数,且 \(\gcd(a,p)=1\) ,则 \(a^{-1}\equiv a^{p-2}(\bmod p)\) 。 计算时间复杂度 \(O(\log p)\) 。

\(a^{p-1}\equiv 1(\bmod p)\)

\(\therefore a\times a^{p-2}\equiv 1(\bmod p)\)

\(\therefore a^{-1}\equiv a^{p-2}(\bmod p)\)

 

线性求逆元:

代码
	inv[1] = 1;
	for(int i=2; i<=n; ++i) 
		inv[i] = ((-1LL*(p/i) % p ) * inv[p%i] % p + p ) % p;

$ \because p\bmod i=p-\lfloor\frac{p}{i}\rfloor\times i$

\(\therefore p=\lfloor\frac{p}{i}\rfloor\times i+(p\bmod i)\)

\(\therefore 0\equiv\lfloor\frac{p}{i}\rfloor\times i+(p\bmod i)(\bmod p)\)

\(\therefore -(p\bmod i)\equiv\frac{p}{i}\times i(\bmod p)\)

\(\therefore -\frac{\lfloor \frac{p}{i}\rfloor\times i}{p\ \bmod\ i}\equiv 1(\bmod p)\)

\(\therefore \frac{1}{i}\equiv-\frac{\lfloor \frac{p}{i}\rfloor}{p\ \bmod\ i}\)

 

求阶乘逆元:

代码
	inv[max1]=ksm(jie[max1],mod-2);//根据费马小定理求逆元
	for(int i=max1-1;i>=1;i--){//逆元递推
		inv[i]=cheng(inv[i+1],i+1);
	}

对于已知的 \((n+1)!\) 的逆元,只需将其乘上 \(n+1\) 即可得到 \(n!\) 的逆元。
即 \(\frac{1}{(n+1)!}\times (n+1)=\frac{1}{n!}\)

标签:frac,运算,数论,bmod,times,逆元,therefore,equiv
From: https://www.cnblogs.com/classblog/p/18326127

相关文章

  • 【python基础02】 序列,元组,列表,字典,位运算
    python运算符位运算符&:按位与|:按位或^:按位异或~:按位取反<<:左移位>>:右移位x=0b11000110y=0b10100101print(bin(x&y))#0b0010print(bin(x|y))print(bin(x^y))print(bin(~x))#第一位是表示正负print(bin(x>>2))#去除右边两位print(bin(x<<2))#......
  • 不使用 + 或 - 运算符 | 添加 2 个数字Python
    我一直在尝试编写逻辑,但测试用例失败。如何改进我的代码?代码:#Giventwointegersaandb,returnthesumofthetwointegerswithoutusingtheoperators+and-.a=-1b=1min_val=min(a,b)max_val=max(a,b)ifmin_val==max_val:pr......
  • 运算符
    运算符:i++/++ii++(后缀递增):这种形式称为后缀递增,它首先返回i的原始值,然后i的值增加1。当i++表达式作为独立语句使用时,它只改变i的值,不返回任何值。++i(前缀递增):这种形式称为前缀递增,它首先将i的值增加1,然后返回i的新值。当++i表达式作为独立语句使用时......
  • 【java SE语法篇】1. 运算符
    目录1.运算符和表达式2.算数运算符3.隐式转换4.强制转换5.自增自减运算符6.赋值运算符7.扩展运算符8.关系运算符9.逻辑运算符9.1&和|的使用:9.2^(异或)的使用:9.3!(取反)的使用:10.短路逻辑运算符11.三元运算符1.运算符和表达式运算符:就是对常量或者......
  • 嵌入式学习第三天:转义字符、算术运算、类型转换...
    目录转义字符运算符优先级和结合性+加法运算符 -减法运算符*乘法运算符/除法运算符%求余运算符/的注意要点: %的注意要点:--自减运算符++自增运算符&取地址运算符,逗号运算符=赋值运算符不同类型的数据间混合赋值总结高精度——>低精度长类型——>短......
  • 数论
    数论基础整除只在整数域上讨论。一般形式为\(a|b\),叫做\(a\)能整除\(b\)。其性质在此不过多叙述。约数与整除相关。若\(a|b\),则称\(b\)是\(a\)的倍数,\(a\)是\(b\)的约数。在具体问题中,如果没有特别说明,约数总是指正约数。最大公因数和最小公倍数即\((a,b......
  • 嵌入式学习第9天——C语言运算符,程序设计结构,输入输出缓冲机制
    2024.7.25第九天笔记关于++混合操作,不同计算结果推理第一种编译结果:inti=5;intsum=(++i)+(++i)=6+7=13第二种编译结果:inti=5;intsum=(++i)+(++i)=6+7=7+7前面的7是因为后面i的变化被影响后,重新赋值=14第一种编译结果:inti=5;in......
  • C++数据和运算符
    回顾:XX.c  gcc专门编译C文件/g++XX.cpp g++专门编译C++文件.exe  执行.out#数据:数据类型****作用******对于计算机来说:编译器预算对象(变量)分配的内存空间大小对于用户来说:方便区分每种数据所代表的含义。什么类型参与运算最后结果还是什么类型基本类型......
  • 第3节课:运算符与表达式
    目录算术运算符加法运算符(+)减法运算符(-)乘法运算符(*)除法运算符(/)模运算符(%)复合赋值运算符赋值运算符简单赋值复合赋值递增和递减运算符递增运算符(++)递减运算符(--)表达式算术表达式赋值表达式条件表达式总结在C++编程中,运算符和表达式是构建程序逻辑的基本元素。它们......
  • 【数论】1 矩阵快速幂(斐波那契)
    Tips:本篇blog适合刚开始学习数论部分的同学本题解仅代表个人思路,如有异议欢迎批评指正,谢谢一.概述该章节讲述的是矩阵运算及快速幂的概念,学过的同学可以跳过本章,直接看矩阵快速幂1.矩阵矩阵类似于向量,我们可以这么来表示一个矩阵如上图,表示了一个  的矩阵。矩阵也......