学习笔记10-18

\(\Huge\color{Red}{10.18}\) \(\Large{\color{Blake}{主题:约数}}\)

主要内容:

.整除

  1. \(a=b \times c\),则称\(a\)\(b\)整除,或\(b\)整除\(a\),记作\(a\mid b\)

  2. \(a=qb+r,(0\le r< \left| b \right|)\),记\(r=a\bmod b\)

  3. 整除的性质:

  • \(a|b\)\(a|c\),则\(\forall x,y\),有\(a|xb+yc\)
  • \(a|b\)\(b|c\),则\(a|c\)
  • \(m\ne0\),则\(a|b\),当且仅当\(ma|mb\)
  • \(a|b\)\(b|a\),则\(a=\pm b\)

.约数

  1. 算数基本定理的推论

对于正整数N......

  • N的正约数集合:

\[{\{p_1^{b_1}p_2^{b_1}...p_m^{b_m}}\} \]

  • N的正约数个数:

\[\prod\limits_{i=1}^m(c_i+1) \]

  • N的所有正约数的和:

\[\prod\limits_{i=1}^m\left(\sum\limits_{j=0}^{c_i}(p_i^j)\right) \]

  1. 求N的正约数集合——试除法:
  • 扫描\(d=1\sim\sqrt{N}\)尝试是否\(d|N\),若能,则\(d\)\(N/d\)都是N的约数。复杂度:\(O(\sqrt{N})\)
  1. 试除法的推论
  • 一个整数N的约数上限个数为\(2 \sqrt{N}\)
  1. \(1\sim{N}\)每个数的正约数集合——倍数法
  • \(\forall d,1 \sim N\)中以\(d\)为约数的数就是\(d,2d,3d,...,\left\lfloor{N/d}\times d\right\rfloor\)
  • 时间复杂度:\(O(NlogN)\)

Code:

vector<int>factor[500010]
for(int i=1;i<=n;i++)
  for(inr j=1;i*j<=n;j++)
	factor[i*j].push_back(i);
for(int i=1;i<=n;i++)
{
	for(int j=0;j<factor[i].size;k++)
  		printf("%d",factor[i][j]);
  	puts(" ");
}
  
  1. 倍数法的推论:

.最大公约数与最小公倍数

性质:

  1. \(a|m\)\(b|m\),则\(\operatorname{lcm}(a,b)|m\)
  2. \(d|a\)\(b|m\),则\(d|\gcd(a,b)\)
  3. \(\operatorname{lcm}(ma,mb)=m \times\operatorname{lcm}(a,b)\).
  4. \(\mathcal{\color{Red}{important}}\)

\[a\times b=\gcd(a,b)\times \operatorname{lcm}(a,b) \]

可用此条性质求出\(\gcd(a,b)\)后用\(a\times b/\gcd(a,b)\)\(\operatorname{lcm}(a,b)\)

.最大公约数的求法

方法一:用唯一分解定理

先分解质因数,然后求最大公约数。

令:

\[a=p_1^a1\times p_2^a2\times...\times p_m^am \]

\[b=p_1^b1\times p_2^b2\times...\times p_m^bm \]

\[\gcd(a,b)=p_1^{\min(a1,b1)}\times p_2^{\min(a2,b2)}\times...\times p_m^{\min(am,bm)} \]

方法二:九章算术·更相减损术

\(\forall a,b\in N,a\ge b,\)\(\gcd(a,b)=\gcd(b,a-b)=\gcd(a,a-b)\)

\(\forall a,b\in N,\)\(\gcd(2a,2b)=2 \times \gcd(a,b)\)

方法三:欧几里得算法

\(\mathcal{\color{Red}{important}}\)

\[\forall a,b\in N,b\ne 0,\gcd(a,b)=\gcd(b,a\bmod b) \]

Code:

int gcd(int a,int b)
{
	return (b==0)?a:gcd(b,a%b);
}

方法四:二进制算法

\(a=b,\gcd(a,b)=a;\)否则,分情况讨论

  1. \(a\)\(b\)均为偶数,\(\gcd(a,b)=2 \times \gcd(a/2,b/2);\)
  2. \(a\)为偶数,\(b\)为奇数\(\gcd(a,b)=\gcd(a/2,b);\)
  3. \(b\)为偶数,\(a\)为奇数\(\gcd(a,b)=\gcd(a,b/2);\)

内心戏:

没啥捷径。记好结论多推推公式才有正解。

高精冲冲冲!

这玩意儿太难写了。一百多行。以后再也不写了

posted @ 2020-10-19 13:29  Sure042  阅读(147)  评论(0编辑  收藏  举报