欧几里得算法(辗转相除法)

本次数论的基础
先给出代码

int gcd(int a, int b)
{while (b != 0){int c = a;a = b;b = c % b;}return a;
}

简单证明(不严谨,只是为了便于记忆):
a = kb + r
r = a % b
假设 c 为 a,b 的最大公约数
那么 c 可以整除 a,b,r 三者
因此 a,b 的最大公约数等于 b,r 的最大公约数
于是 gcd(a, b) = gcd(b, a%b)
当出现 gcd(a,0) 的情况时说明找到了最大公约数,为 a

扩欧(扩展欧几里得算法)

用于求解形如 ax + by = c (a,b,c均为整数)的方程的一组解
事实上,只有当 gcd(a,b) 能够整除 c 的时候方程才有解
因此通常情况下a,b是互质的,确保方程有解
先给出代码(默认c为1)

//在求解的同时返回a,b的最大公约数,建议将x y设置为全局变量
//最后的结果:x为a%b的逆元,y为b%a的逆元,结果可能会小于零,若小于零,手动x+=b,y+=a
int ex_gcd(int a, int b)
{if (b == 0)//b==0时得到gcd的结果,即a'=gcd(a,b)这里的a'和a是两个值,所以x=1{x = 1;y = 0;return a;}int ans = ex_gcd(b, a % b, x, y);//根据x',y'和x,y的关系逆推回去int t = x;x = y;y = t - (a / b) * y;return ans;//返回最小公约数
}

证明

费马小定理求逆元

若有 a p 互质,且 p 为质数,则 ap-1 =1 (mod p)
因此 ap-2 = x 就是 a 在模 p 下的逆元
这个定理的限制较多,只有在p为质数的条件下才能使用。

线性打逆元表

如果要求一段连续数字的逆元,有一种线性的方法(会用板子就行,证明略)

long long f[maxn];
void work(long long n, long long p)
{f[1] = 1; // 1的逆元为1for (long long i = 2; i <= n; i++){f[i] = -(p / i) * f[p % i];f[i] = (f[i] % p + p) % p;}
}

欧拉函数

φ(n)表示小于等于n的正整数中与n互质的数的个数,计算方法如图(p是x的所有质因数)

int Phi(int x)
{int ans = x;for (int i = 2; i * i <= x; i++){if (x % i == 0) // i是x的一个质因数{ans = ans / i * (i - 1);while (x % i == 0)x /= i;}}if (x > 1) ans = ans / x * (x - 1);return ans;
}

φ(n)具有以下性质:
如果 m,n 互质,则 φ(nm) = φ(m)φ(n)

利用这个性质再结合素数筛的思想可以线性求一段数字的欧拉函数:

long long phi[maxn], n, pr[maxn], tot = 0, ans = 0;
bool pd[maxn];void getphi(int n)
{phi[1] = 1;for (int i = 2; i <= n; i++){if (pd[i] = false){pr[++tot] = i;phi[i] = i - 1; //质数除了1以外都与自己互质}for (int j = 1; j <= tot && pr[j] * i <= n; j++){long long t = i * pr[j];pd[t] = true;if (i % pr[j] == 0){phi[t] = phi[i] * pr[j];break;}elsephi[t] = phi[i] * (pr[j] - 1);}}
}

组合计数

卢卡斯定理 a,b很大时(1e18),并且要求对结果取模p,有以下结论

int quick(int a, int b, int p)
{int res = 1;while (b){if (b & 1) res = res * a % p;a = a * a % p;b >>= 1;}return res;
}
int C(int a, int b, int p)
{if (b > a) return 0;int res = 1;for (int i = 1, j = a; i <= b; i++, j--){res = res * j % p;res = res * quick(i, p - 2, p) % p;}return res;
}
int lucas(int a, int b, int p)
{if (a < p && b < p) return C(a, b, p);return C(a % p, b % p, p) * lucas(a / p, b / p, p) % p;
}

第十四周总结(初等数论)相关推荐

  1. 2017-2018-1 20155328 《信息安全系统设计基础》第十四周学习总结

    2017-2018-1 20155328 <信息安全系统设计基础>第十四周学习总结 本周学习任务是找出自己本学期学得最差的一章,重新学,总结新的收获.我认为自己学得最差的一章是教材第七章& ...

  2. 2017-2018-1 20155320 《信息安全系统设计基础》第十四周学习总结

    2017-2018-1 20155320 <信息安全系统设计基础>第十四周学习总结 参考老师提供的教材内容导读 本周的内容是要找出全书你认为学得最差的一章,深入重新学习一下 我决定学习第十 ...

  3. 2017-2018 20155309南皓芯 信息安全系统基础设计第十四周博客

    找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分): 总结新的收获 给你的结对学习搭档讲解或请教,并获取反馈 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题" ...

  4. 2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结

    2017-2018-1 20155324 <信息安全系统设计基础>第十四周学习总结 找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分): •总结新的收获 •给你的结对学习搭 ...

  5. 2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结

    2017-2018-1 20155229 <信息安全系统设计基础>第十四周学习总结 对"第三章 程序机器级表示"的深入学习 我选择这章的理由是第一次学的时候还是不太理解 ...

  6. 20145240《信息安全系统设计基础》第十四周学习总结

    20145240<信息安全系统设计基础>第十四周周学习总结 教材学习内容总结 第九章 虚拟存储器 1.虚拟存储器3个重要的能力: (1)将主存看作是一个存储在磁盘上的地址空间的高速缓存,在 ...

  7. C++走向远洋——60(十四周阅读程序、STL中的简单容器和迭代器)

    */* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:text.cpp* 作者:常轩* 微信公众号:Worldhello* ...

  8. C语言编程>第十四周 ⑦ 请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。

    例题:请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回. 例如,若有5门课程的成绩是88.92.80.61.5.55:则函数的值为75.30. 请勿改动主函数main与其 ...

  9. 2019年6月1日第十四周UML项目日志

    体育馆团体预约系统 UML软件工程项目日志 May,23th ,2019 博客地址 https://www.cnblogs.com/BIT2019UML06/ 客户提交内容 项目名称:体育馆课外预约系 ...

  10. 统计学习第十四周-方差分析

    学习内容: 因子.水平.单因素方差分析.双因素方差分析.协方差分析 概述 通过对数据误差来源的分析检验各总体的均值是否相等来判断分类型的自变量对数值型的因变量是否有显著影响. 因素:即因子,所要检验的 ...

最新文章

  1. Briefings in Bioinformatics:微生物基因组学和功能基因组学相关软件和数据库的研究进展
  2. Nature Reviews:全新的益生元定义和范围
  3. double 四舍五入保留一定的位数
  4. 中小企业应如何选择合适的数据保护工具?
  5. 算法----最大承载量下的最大价值问题
  6. 怎样用u盘linux安装ntp协议,电脑中怎么配置NTP服务
  7. C/C++——一个因为unsigned引发的大问题
  8. (22)FPGA面试题名词解释IRQ、BIOS、USB、VHDL、SDR
  9. 从零基础入门Tensorflow2.0 ----七、34 embedding rnn
  10. PyCharm----中文显示乱码的解决方法总结
  11. Oracle傻瓜手册
  12. Create VerifyCode by jsp of java
  13. 数字电路实验四选一数据选择器行为级模型
  14. Jad批量反编译class
  15. sql创建和添加时间字段
  16. 开博了,微博太短,不适合,还是稀饭大的博客
  17. 《程序员的自我修养》学习笔记之温故而知新
  18. 意识理论综述:众多竞争的意识理论如何相互关联?
  19. python写安卓游戏_10分钟学会python写游戏脚本!Python其实很简单
  20. 个人家用nas_希捷个人云评测:家用NAS中的佼佼者

热门文章

  1. 在Windows下读取Ext4分区
  2. 电商管理系统开发模式解析
  3. 比尔·盖茨经典语录集锦
  4. 《精英律师》精彩点评,教您如何做一个精英
  5. 华为DHCP中继实战
  6. 网红营销——中东电商平台制胜的王道之选
  7. 屏联万物—开启街区屏媒时代,开创数字品牌先河
  8. POJ 2111 Millenium Leapcow(记忆化搜索+dfs记录路径)
  9. 解决SEO优化中查询网站域名建站历史记录的问题
  10. becky!的使用2