5.11-5.17学习总结(数论)

一、学习内容

这周学的都是原理方面的知识,平时用到的只是表面,现在深入学习下。
(接上此总结)

1、因子个数

朴素的求因子个数的方法为枚举[1, n]的数进行余数判定,复杂度为O(n)
加入一个小优化:如果m为n的因子,那么n/m也必然为n的因子;
设m <= n/m,则有m <= sqrt(n),
只要枚举从[1, sqrt(n)]的因子然后计数即可,复杂度变为O(sqrt(n))。

2、整数惟一分解定理的推论
  • 若整数𝑁≥2,那么 𝑁= p 1 r 1 p_1^{r_1} p1r1 p 2 r 2 p_2^{r_2 } p2r2 p k r k p_k^{r_k} pkrk p i p_i pi 为素数 , r i r_i ri≥0)

  • 𝑁 的正约数集合为:{ p 1 b 1 p_1^{b_1} p1b1 p 2 b 2 p_2^{b_2 } p2b2 p k b k p_k^{b_k} pkbk }(0 ≤ b i b_i bi r i r_i ri )

  • 𝑁 的正约数个数为:在这里插入图片描述

  • 除了完全平方数,约数总是成对出现的,即 d ≤ N \sqrt{N} N N d \frac{N}{d} dN N \sqrt{N} N 都是 𝑁 的约数。

  • 𝑁 的约数个数上界为 2 N \sqrt{N} N ,时间复杂度为 𝑂( N \sqrt{N} N ) 。

  • 𝑁 的所有正约数的和为:
    在这里插入图片描述

3、计算gcd(𝑎,𝑏):适用于高精度数的二进制法

适合大整数(高精度)情况下求gcd

  • 𝑎<𝑏时,gcd(𝑎,𝑏)=gcd(𝑏,𝑎)
  • 𝑎=𝑏时,gcd(𝑎,𝑏)=𝑎
  • 𝑎,𝑏 同为偶数时,gcd(𝑎,𝑏)=2∗gcd(𝑎/2,𝑏/2)
  • 𝑎 为偶数,𝑏 为奇数时,gcd(𝑎,𝑏)=gcd(𝑎/2,𝑏)
  • 𝑎 为奇数,𝑏 为偶数时,gcd(𝑎,𝑏)=gcd(𝑎,𝑏/2)
  • 𝑎,𝑏 同为奇数时,gcd(𝑎,𝑏)=gcd(𝑎−𝑏,𝑏)

又称“更相减损术”。

【代码】

int gcd(int m,int n){
    if (m == n) return m;
    if (m < n) return gcd(n,m);
    if (m & 1 == 0) 
    	return (n & 1 == 0)? 2*gcd(m>>1,n>>1):gcd(m>>1,n);
    return (n & 1 == 0)? gcd(m,n>>1): gcd(n,m-n);
 }
4、lcm(最小公倍数)

𝑎 和 𝑏 最小的正公倍数为 𝑎 和 𝑏 的最小公倍数,记作 lcm(𝑎,𝑏) 。
最小公倍数有如下性质:
lcm(𝑎,𝑏)=𝑎𝑏/(gcd(𝑎,𝑏))
若 𝑎|𝑚 且 𝑏|𝑚,则 lcm(𝑎,𝑏)|𝑚
若 𝑚,𝑎,𝑏 是正整数,则 lcm(𝑚𝑎,𝑚𝑏)=𝑚∗lcm(𝑎,𝑏) 。

5、模

a = int(a/p)*p + a%p;

随时取模性质:

  • 在只含加法和乘法的式子中,如果最后的运算结果需要对𝑝取模,那么您可以在运算过程中随便取模。
  • 只需要最后把结果对𝑝再取模,答案就是正确的。
  • 正整数𝑛被3整除,当且仅当十进制下𝑛的各位数字之和被3整除。例如,123被3整除,1+2+3=6也被3整除。
  • 𝑛被4整除当且仅当其最后两位数被4整除。
快速幂
int pow_mod(int a,int n,int m){
    if(n == 0) return 1;
    int x = pow_mod(a,n/2,m);
    long long ans = (long long)x * x % m;
    if(n % 2 == 1) 
    	ans = ans * a % m;
    return ans;
 }
5、一些定理

1.费马小定理:若p为素数,且a和p互素,那么 a p − 1 a^{p-1} ap1 ≡ 1(mod p)
2.欧拉定理: 在p不是素数的时候,对于和m互素的a,有: a f ( m ) a^{f(m)} af(m) ≡ 1(mod m);
3.裴蜀定理:对于任何a,b 关于未知数x y的线性不定方程ax+by=c;当 a,b互素等价于ax+by=1有解

剩下的等下周学完把所有的一起整理一下吧。

总结以及感想

数论这一块的题没怎么做,大概是思维方向,代码容易一些,但是思维深一点吧,具体做了再具体分析。
不得不说的是这周cf真的多,多到题目还没来得及补题
前些天div3的ac了3道题还扣分了,上上上场div2ac了一道题结果加分了,有点难……div3那场分数又创新低,不过最近这两场应该能把分数网上拉一下,感觉做的勉强还行吧,div2的比赛永远两题魔咒。
感觉高中的数学知识全都还给高中老师了,最近那场div2的比赛C题用到的公式全都忘记了,虽然百度搜公式也没找到思路,感觉数学再div2div3里面大行其道,算法用的不算多,近期用到了dp还有前缀和(竟然能用上了!),感觉还不错,自从有次分数回到1200又跌下来之后,渐渐有点状态了,以后继续加油吧,还有几周时间,希望18周前能到1400吧(希望……),加油加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅梦曾倾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值