一、

模运算

当答案或者运算过程中数据太大,题目要求输出答案对某个大数据取模,
有以下结论:

(a+b)%MOD=(a%MOD+b%MOD)%MOD
(a-b)%MOD=(a%MOD-b%MOD)%MOD
(a*b)%MOD=(a%MOD*b%MOD)%MOD
而除法取模需要逆元,后面会介绍

c++语言取模过程中,会遵循商尽量大的原则,所以(-5)%3=-2
这个不符合数学上取模的标准,因此使用c++对减法取模应该写成:

(a-b+MOD)%MOD

二、质数

1~n当中,大约有nln(n)\frac{n}{ln(n)}ln(n)n​个质数

1、质数筛

埃氏筛
复杂度为O(nlg(lg(n)))

const int maxn=1e6;
int prime[maxn];
bool vis[maxn];
int cnt=0;
void Prime(int n){for(int i=2;i<=n;i++){if(!vis[i]){prime[++cnt]=i;for(int j=i*i;j<=n;j+=i){vis[j]=true;}}}
}

//此处有个小优化,嵌套的循环内jjj从 i∗ii * ii∗i 开始,而不是i+ii + ii+i开始,因为i∗(2−>i−1)i*(2 ->i-1)i∗(2−>i−1)在这之前都已经被筛去。

欧拉筛
复杂度O(n)

const int maxn=1e6;
int prime[maxn];
bool vis[maxn];
int cnt=0;
void Prime(int n){for(int i=2;i<=n;i++){if(!vis[i]){prime[++cnt]=i;}for(int j=1;prime[j]*i<=n;j++){vis[prime[j]*i]=true;if(i%prime[j]==0){//保证每个合数都用该数最小的质因子筛掉//当i%prime[j]==0的时候,说明如果j继续加一,被筛掉的数就不是用其最小的质因子筛去的了。break;}}}
}

2、质因数分解----试除法

任意正整数nnn最多有一个比sqrt(n)sqrt(n)sqrt(n)大的质因子,质因数分解模版如下:
(⁎⁍̴̛ᴗ⁍̴̛⁎)
质因数分解模版

int pdivid[10000];
int cnt=0;//记录一共有多少个质因子
void divid(int n){for(int i=2;i<=n/i;i++){if(n%i==0){//此处i一定为质数pdivid[++cnt]=i;int s=0;while(n%i==0){n/=i;s++;//可以计算每个质因子出现的次数,这份代码不记录这个数}}}if(n>1){pdivid[++cnt]=n;}
}
int main(){int n;cin>>n;divid(n);cout<<pdivid[cnt]<<endl;
}

三、约数

1、试除法

直接枚举从1~sqrt(n)所有的数字,可以得到n所有的约数。
每个数的约数个数期望为lg(n).

2、约数个数和约数之和

先对N进行质因数分解,假设分解后:
o(`ω´ )o:::::

N==p1c1∗p2c2∗...∗pkckN== p_1^{c_1} * p_2^{c_2} * ... *p_k^{c_k}N==p1c1​​∗p2c2​​∗...∗pkck​​

(pi为质因子,ci为质因子对应的次数)

那么N的约数个数为::
(c1+1)∗(c2+1)∗...∗(ck+1)(c1 + 1) * (c2 + 1) * ... * (ck + 1)(c1+1)∗(c2+1)∗...∗(ck+1)

N的约数之和为::
(p10+p11+...+p1c1)∗...∗(pk0+pk1+...+pkck)(p_1^0 + p_1^1 + ... + p_1^{c_1}) * ... * (pk^0 + pk^1 + ... + pk^{c_k})(p10​+p11​+...+p1c1​​)∗...∗(pk0+pk1+...+pkck​)
(把上式子展开后,直接看出为计算每个约数的和)

const int mod=1e9+7;
int main(){int n;cin>>n;unordered_map<int,int> primcnt;while(n--){int x;cin>>x;for(int i=2;i<=x/i;i++){while(x%i==0){x/=i;primcnt[i]++;}}if(x!=1){primcnt[x]++;}}ll ans=1;//遍历mapfor(auto prim:primcnt){ans=(ans*(prim.second+1))%mod;}cout<<ans<<endl;
}

3、最大公约数(gcd)

欧几里得算法

gcd(a,b)=gcd(b,agcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a

(好神奇啊!)ʕ •ᴥ•ʔ

int gcd(int a,int b){if(b==0){return a;}elsereturn gcd(b,a%b);
}

四、欧拉函数

1、定义
欧拉函数是小于n的正整数中与n互质的数的数目(比如φ(1)=1φ(1)=1φ(1)=1)

2、公式
φ(N)=N∗(1−1p1)∗.....∗(1−1pi)φ(N)=N*(1-\frac{1}{p_1}) * ..... * (1-\frac{1}{p_i})φ(N)=N∗(1−p1​1​)∗.....∗(1−pi​1​)
其中pip_ipi​为NNN的质因子。

3、筛法求1~n的欧拉函数

void get_eulers(int n){//得到1~n所有欧拉函数的值//其实是欧拉筛变体int cnt=0;phi[1]=1;for(int i=2;i<=n;i++){if(!vis[i]){prim[++cnt]=i;//如果这个数是个素数,显然在1~i之间,有i-1个数与其互质phi[i]=i-1;}for(int j=1;prim[j]*i<=n&&j<=cnt;j++){vis[i*prim[j]]=1;if(i%prim[j]==0){//如果prim[j]是i的因子//根据公式,phi[i]=i*(1-1/P1)*...*(1-1/Pi)//i*prim[j]的所有因子跟i相同//phi[i*prim[i]]=prim[i]*i*(1-1/P1)*...*(1-1/Pi)=phi[i]*prim[i]phi[i*prim[j]]=phi[i]*prim[j];break;}//如果prim[j]不是i的因子//那么i*prim[j]的因子与i相差一个prim[j]//phi[i*prim[i]]=phi[i]*prim[j]*(1-1/prim[j])=phi[i]*phi[prim[j]]phi[i*prim[j]]=phi[i]*(prim[j]-1);}}
}

欧拉定理

如果a与n互质,那么aphi(n)≡1(modn)a^{phi(n)}≡1(mod n)aphi(n)≡1(modn).

四、快速幂

ll my_pow(int a,int k,int p=1e9+7){ll res=1;while(k){if(k&1){//如果k不能整除2res=(res*a)%p;}k>>=1;a=(a*a)%p;//让底数平方}return res;
}

数论入门 2021-2-28相关推荐

  1. 【小组专题一:数论入门:整数】数和序列 | 和与积 | 数学归纳与第二数学归纳

    数论入门:整数 [1.1 数和序列] 练习中的证明: [1.2 和与积] 课后练习: [1.3 数学归纳法] 课后练习(都用数学归纳或者第二数学归纳证明): ·|· 根据<初等数论及其应用> ...

  2. 前端面经笔记 2021.8.28

    前端面经笔记 2021.8.28 下面哪些执行结果为true() A.'foo' == new function(){ return String('foo'); }; B.'foo' == new ...

  3. 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列

    数学竞赛 数论是纯粹数学的分支之一,主要研究整数的性质,按研究方法分为初等数论和高等数论.中学生(甚至小学生)课外数学兴趣小组的许多内容是属于初等数论的,各级别数学竞赛也会把初等数论作为重点内容进行考 ...

  4. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

  5. 2021.12.28同花顺--智能--选股平台----技术指标--其它指标--逍遥买卖宝--指标B

    2021.12.28同花顺--智能--选股平台-- --技术指标--其它指标--逍遥买卖宝--指标B

  6. Spring Boot安装及使用(2021.10.28)

    Spring Boot安装及使用 2021.10.28 1.Spring Boot 简介 1.1 为何选择Spring? 1.2 Spring的功能 1.3 Spring项目的依赖包管理工具(Mave ...

  7. 2021.1.28课程摘要(逻辑教育-王劲胜)

    2021.1.28课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.浅拷贝和深拷贝 二.元组 三.字典 四.作业讲解 逻辑教育-13期-Python基础班-王劲胜 一.浅拷贝和深拷贝 • 深 ...

  8. 【离散数学】 SEU - 24 - 2021/05/28 - Algebraic System

    Discrete Mathematical Structures (6th Edition) 2021/05/28 - Algebraic System Algebraic System Binary ...

  9. PCL点云库安装及学习(2021.7.28)

    PCL点云库学习 2021.7.28 1.PCL简介 2.Win10系统下PCL环境配置 2.1 前提环境(Win10 64位+Visual Studio 2015) 2.2 方式一:源码编译(过程繁 ...

  10. python编程入门视频推荐_Python编程入门2021攻略,书籍推荐,视频推荐,每天更新...

    写这篇文章的初衷 2018年我大学毕业,和很多人一样.大学里的世界,我也是整天LOL.打了4年,确还只是个黄金守门员.恋爱也想都不敢想.不过,话说回来,我拿了三年的奖学金.真的不是因为我学习认真,而是 ...

最新文章

  1. Visual Studio 2017 - Windows应用程序打包成exe文件(1)- 工具简单总结
  2. mysql主流产品介绍论文_MySQL数据库产品介绍
  3. Reddit 票选:2019 年绝对不能错过的机器学习论文
  4. windows python MySQL-python安装过程
  5. linux怎么修改sftp默认端口,如何在 Linux 系统中如何更改 SFTP 端口
  6. OpenCV-Python教程(4、形态学处理)
  7. Python列表的增删查改及常用操作
  8. PWA(Progressive Web App)入门系列:(四)Promise
  9. python求图形面积_求高效的,计算两多边形重叠面积的算法,python实现
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的客户关系CRM系统
  11. mybatis xml标签,批量插入
  12. Failed to run the WC DB work queue associated with 错误的解决
  13. sqlserver200864位下载_sql server 2008 r2中文版
  14. Linux网络操作系统及应用教程( 项目式)项目一
  15. 【老生谈算法】matlab实现遗传算法改进的模糊C-均值聚类算法源码——C-均值聚类算法
  16. 户外移动电源:华宝新能、EcoFlow上演“龙虎斗”
  17. 计算机进制转换练习,二进制十进制八进制十六进制转换练习题.docx
  18. 网络历史之金融投资三剑客01
  19. 微信小程序 + shiro 实现登录(安全管理) —— 保姆级教学
  20. 太实用了!Pytorch快速安装【清华源】 方法,最优国内镜像选择,妥妥的!

热门文章

  1. 商务与经济统计(13版,Python)笔记 01-02章
  2. java ioutils 写入文件_IOUtils和FileUtils的学习笔记
  3. disp语句怎么格式 matlab_matlab输出语句print
  4. 超强合集:OCR 文本检测干货汇总(含论文、源码、demo 等资源)
  5. ug中文字大小设置_UG编辑文字怎么放大或缩小?
  6. UG NX 12 草图环境中使用鼠标的说明
  7. 数字图像处理(2)——数字图像获取
  8. ICEM(2)—机翼翼稍网格绘制
  9. c语言屏蔽一段程序,C语言#if 0阻止代码段
  10. Kafka Eagle V1.3.4更新预览