0x32 约数

0x32 约数

定义

若整数 n n n除以整数 d d d的余数为0,即 d d d能整除 n n n,则称 d d d n n n的约数, n n n d d d的倍数,记为 d ∣ n d|n dn

算术基本定理的推论

在算术基本定理中,若正整数 N N N被唯一分解为 N = p 1 c 1 p 2 c 2 . . . p m c m N=p_1^{c_1}p_2^{c_2}...p_m^{c_m} N=p1c1p2c2...pmcm,其中 c i c_i ci都是正整数, p i p_i pi都是质数,且满足 p 1 < p 2 < . . . < p m p_1<p_2<...<p_m p1<p2<...<pm,则 N N N的正约数集合可写作:
{ p 1 b 1 p 2 b 2 . . . p m b m } , 其中 0 ≤ b i ≤ c i \{p_1^{b_1}p_2^{b_2}...p_m^{b_m} \},其中0\leq b_i \leq c_i {p1b1p2b2...pmbm},其中0bici
N N N的正约数个数为:
( c 1 + 1 ) ∗ ( c 2 + 1 ) ∗ . . . ∗ ( c m + 1 ) = ∏ i = 1 m ( c i + 1 ) (c_1+1)*(c_2+1)*...*(c_m+1)=\prod_{i=1}^m(c_i+1) (c1+1)(c2+1)...(cm+1)=i=1m(ci+1)
N N N的所有正约数的和为:
( 1 + p 1 + p 1 2 + . . . + p 1 c 1 ) ∗ . . . ∗ ( 1 + p m + p m 2 + . . . + p m c m ) = ∏ i = 1 m ( ∑ j = 0 c i ( p i ) j ) (1+p_1+p_1^2+...+p_1^{c_1})*...*(1+p_m+p_m^2+...+p_m^{c_m})=\prod_{i=1}^m(\sum_{j=0}^{c_i}{(p_i)}^j) (1+p1+p12+...+p1c1)...(1+pm+pm2+...+pmcm)=i=1m(j=0ci(pi)j)
N N N的正约数集合——试除法

d ≥ N d\geq \sqrt{N} dN N N N的约数,则 N / d ≤ N N/d\leq \sqrt{N} N/dN 也是 N N N的约数。换言之,约数总是成对出现的(除了对于完全平方数, N \sqrt{N} N 会单独出现)。

因此,只需扫描 d = 1 ∼ N d=1\sim \sqrt{N} d=1N ,尝试 d d d能否整除 N N N,若能整除,则 N / d N/d N/d也是 N N N的约数。时间复杂度为 O ( N ) O(\sqrt{N}) O(N )

int factor[1600],m=0;
for(int i=1;i*i<=n;++i)
{
    if(n%i==0)
    {
        factor[++m]=i;
        if(i!=n/i) factor[++m]=n/i;
	}
}

试除法的推论:一个整数 N N N的约数个数上界为 2 N 2\sqrt{N} 2N

1 ∼ N 1\sim N 1N每个数的正约数集合——倍数法

若用“试除法”分别求出 1 ∼ N 1\sim N 1N每个数的正约数集合,时间复杂度过高,为 O ( N N ) O(N\sqrt{N} ) O(NN )。可以反过来考虑,对于每个数 d d d 1 ∼ N 1\sim N 1N中以 d d d为约数的数就是 d d d的倍数 d , 2 d , 3 d , . . . , ⌊ N / d ⌋ ∗ d d,2d,3d,...,\lfloor N/d \rfloor *d d,2d,3d,...,N/dd。一下程序采用“倍数法”求出 1 ∼ N 1\sim N 1N每个数的正约数集合:

vector<int> factor[500010];
for(int i=1;i<=n/i;++i)
    for(int j=1;j<=n/i;++j)
        factor[i*j].push_back(i);

上述时间复杂度为 O ( N + N / 2 + N / 3 + N / N ) = O ( N l o g N ) O(N+N/2+N/3+N/N)=O(NlogN) O(N+N/2+N/3+N/N)=O(NlogN)

倍数法的推论: 1 ∼ N 1\sim N 1N每个数的约数个数的总和大约为 N l o g N NlogN NlogN

1.最大公约数

定义

若自然数 d d d同时是自然数 a a a b b b的约数,则称 d d d a a a b b b的公约数。在所有 a a a b b b的公约数中最大的一个称为 a a a b b b的最大公约数,记为 g c d ( a , b ) gcd(a,b) gcd(a,b)

若自然数 m m m同时是自然数 a a a b b b的倍数,则称 m m m a a a b b b的公倍数。在所有 a a a b b b的公倍数中最小的一个称为 a a a b b b的最小公倍数,记为 l c m ( a , b ) lcm(a,b) lcm(a,b)

同理,我们也可以定义三个数以及更多个数的最大公约数、最小公倍数。

定理
∀ a , b ∈ N , g c d ( a , b ) ∗ l c m ( a , b ) = a ∗ b \forall a,b \in N,gcd(a,b)*lcm(a,b)=a*b a,bN,gcd(a,b)lcm(a,b)=ab
九章算数▪更相减损术
∀ a , b ∈ N , a ≥ b , 有 g c d ( a , b ) = g c d ( b , a − b ) = g c d ( a , a − b ) \forall a,b \in N,a\geq b,有gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) a,bN,ab,gcd(a,b)=gcd(b,ab)=gcd(a,ab)

∀ a , b ∈ N , 有 g c d ( 2 a , 2 b ) = 2 g c d ( a , b ) \forall a,b\in N,有gcd(2a,2b)=2gcd(a,b) a,bN,gcd(2a,2b)=2gcd(a,b)

欧几里得算法
∀ a , b ∈ N , b ≠ 0 , g c d ( a , b ) = g c d ( b , a   m o d   b ) \forall a,b \in N,b\neq 0,gcd(a,b)=gcd(b,a\ mod\ b) a,bN,b=0,gcd(a,b)=gcd(b,a mod b)

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

使用欧几里得算法求最大公约数的复杂度为 O ( l o g ( a + b ) ) O(log(a+b)) O(log(a+b))。欧几里得算法是常用的求最大公约数的方法。不过高精度除法(取模)不容易实现,需要做高精度运算时,可考虑更相减损术代替欧几里得算法。

2.互质与欧拉函数

定义

∀ a , b ∈ N \forall a,b\in N a,bN,若 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1,则称 a , b a,b a,b互质。

对于三个数或者更多个数的情况,我们把 g c d ( a , b , c ) = 1 gcd(a,b,c)=1 gcd(a,b,c)=1的情况称为 a , b , c a,b,c a,b,c互质。把 g c d ( a , b ) = g c d ( b , c ) = g c d ( c , a ) = 1 gcd(a,b)=gcd(b,c)=gcd(c,a)=1 gcd(a,b)=gcd(b,c)=gcd(c,a)=1称为 a , b , c a,b,c a,b,c两两互质。后者显然是一个更强的条件。

欧拉函数

1 ∼ N 1\sim N 1N中与 N N N互质的数的个数被称为欧拉函数,即为 ϕ ( N ) \phi(N) ϕ(N)

若在算术基本定理中, N = p 1 c 1 p 2 c 2 . . . p m c m N=p_1^{c_1}p_2^{c_2}...p_m^{c_m} N=p1c1p2c2...pmcm,则:
ϕ ( N ) = N ∗ p 1 − 1 p 1 ∗ p 2 − 1 p 2 ∗ . . . ∗ p m − 1 p m = N ∗ ∏ 质数 p ∣ N ( 1 − 1 p ) \phi(N)=N*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}*...*\frac{p_m-1}{p_m}=N*\prod_{质数p|N}(1-\frac{1}{p}) ϕ(N)=Np1p11p2p21...pmpm1=N质数pN(1p1)
证明:

p p p N N N的质因子, 1 ∼ N 1\sim N 1N p p p的倍数有 p , 2 p , 3 p , . . . , ( N / p ) ∗ p p,2p,3p,...,(N/p)*p p,2p,3p,...,(N/p)p,共 N / p N/p N/p个。同理,若 q q q也是 N N N的质因子,则 1 ∼ N 1\sim N 1N q q q的倍数有 N / q N/q N/q个。如果我们把这 N / p + N / q N/p+N/q N/p+N/q个数去掉,那么 p ∗ q p*q pq的倍数被排除了两次,需要加回来一次。因此, 1 ∼ N 1\sim N 1N不含有共同质因子 p p p q q q的个数为:
N − N p − N q + N p q = N ∗ ( 1 − 1 p − 1 q + 1 p q ) = N ( 1 − 1 p ) ( 1 − 1 q ) N-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}=N*(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{pq})=N(1-\frac{1}{p})(1-\frac{1}{q}) NpNqN+pqN=N(1p1q1+pq1)=N(1p1)(1q1)
实际上,上述思想被称为容斥思想,我们将在0x37节详细介绍。类似地,可以在 N N N地全部质因子上使用容斥思想,即可以得到 1 ∼ N 1\sim N 1N中不与 N N N含有任何共同质因子的数的个数,也就是与 N N N互质的数的个数。

根据欧拉函数的计算式,我们只需要分解质因数,既可以顺便求出欧拉函数。

int phi(int n)
{
    int ans=n;
    for(int i=2;i<=sqrt(n);++i)
    {
        if(n%i==0)
        {
            ans=ans/i*(i-1);
            while(n%i==0) n/=i;
        }
    }
    if(n>1)
        ans=ans/n*(n-1);
   	return ans;
}

性质 1 ∼ 2 1\sim2 12

1. ∀ n > 1 , 1 ∼ n \forall n>1,1\sim n n>1,1n中与 n n n互质的数的和为 n ∗ ϕ ( n ) / 2 n*\phi(n)/2 nϕ(n)/2

2.若 a , b a,b a,b互质,则 ϕ ( a b ) = ϕ ( a ) ϕ ( b ) \phi(ab)=\phi(a)\phi(b) ϕ(ab)=ϕ(a)ϕ(b)

证明:

因为 g c d ( n , x ) = g c d ( n , n − x ) gcd(n,x)=gcd(n,n-x) gcd(n,x)=gcd(n,nx),所以与 n n n不互质的数 x , n − x x,n-x x,nx成对出现,平均值为 n / 2 n/2 n/2。因此,与 n n n互质的数的平均值也是 n / 2 n/2 n/2,进而得到性质1。

根据欧拉函数的计算式,对 a , b a,b a,b分解质因数,直接可得性质2。把性质2推广到一般的函数上,可以得到“积极函数”的概念。

积极函数

如果当 a , b a,b a,b互质时,有 f ( a b ) = f ( a ) ∗ f ( b ) f(ab)=f(a)*f(b) f(ab)=f(a)f(b),那么称函数 f f f为积极函数。

性质 3 ∼ 6 3\sim6 36

3.若 f f f是积极函数,且在算术基本定理中 n = ∏ i = 1 m p i c i n=\prod_{i=1}^{m}p_i^{c_i} n=i=1mpici,则 f ( n ) = ∏ i = 1 m f ( p i c i ) f(n)=\prod_{i=1}^{m}f(p_i^{c_i}) f(n)=i=1mf(pici)

4.设 p p p为质数,若 p ∣ n p\mid n pn p 2 ∣ n p^2 \mid n p2n,则 ϕ ( n ) = ϕ ( n / p ) ∗ p \phi(n)=\phi(n/p)*p ϕ(n)=ϕ(n/p)p

5.设 p p p为质数,若 p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n,则 ϕ ( n ) = ϕ ( n / p ) ∗ ( p − 1 ) \phi(n)=\phi(n/p)*(p-1) ϕ(n)=ϕ(n/p)(p1)

6. ∑ d ∣ n ϕ ( d ) = n \sum_{d|n}\phi(d)=n dnϕ(d)=n

证明:

n n n分解质因数,按照积极函数的定义,性质3显然成立。

p ∣ n p\mid n pn p 2 ∣ n p^2\mid n p2n,则 n , n / p n,n/p n,n/p包含相同的的质因子,只是 p p p的质数不同。直接把 ϕ ( n ) \phi(n) ϕ(n) ϕ ( p / n ) \phi(p/n) ϕ(p/n)按照欧拉函数的就算公式写出,二者相除,商为 p p p,所以性质4成立。

p ∣ n p\mid n pn p 2 ∤ n p^2\nmid n p2n,则 p , n / p p,n/p p,n/p互质,由 ϕ \phi ϕ是积极函数得 ϕ ( n ) = ϕ ( n / p ) ∗ ϕ ( p ) \phi(n)=\phi(n/p)*\phi(p) ϕ(n)=ϕ(n/p)ϕ(p),而 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1,所以性质5成立。

f ( n ) = ∑ d ∣ n ϕ ( d ) f(n)=\sum_{d\mid n}\phi(d) f(n)=dnϕ(d)。用乘法分配律展开比较,再利用 ϕ \phi ϕ是积极函数,得到:若 n , m n,m n,m互质,则 f ( n m ) = ∑ d ∣ n m ϕ ( d ) = ( ∑ d ∣ n ϕ ( d ) ) ∗ ( ∑ d ∣ m ϕ ( d ) ) = f ( n ) ∗ f ( m ) f(nm)=\sum_{d\mid nm}\phi(d)=(\sum_{d\mid n}\phi(d))*(\sum_{d\mid m}\phi(d))=f(n)*f(m) f(nm)=dnmϕ(d)=(dnϕ(d))(dmϕ(d))=f(n)f(m)。即 ∑ d ∣ n ϕ ( d ) \sum_{d\mid n}\phi(d) dnϕ(d)是积极函数。对于单个质因子, f ( p m ) = ∑ d ∣ p m ϕ ( d ) = ϕ ( 1 ) + ϕ ( p ) + ϕ ( p 2 ) + . . . + ϕ ( p m ) f(p^m)=\sum_{d\mid p^m}\phi(d)=\phi(1)+\phi(p)+\phi(p^2)+...+\phi(p^m) f(pm)=dpmϕ(d)=ϕ(1)+ϕ(p)+ϕ(p2)+...+ϕ(pm)是一个等比数列求和再加1,结果为 p m p^m pm。所以 f ( n ) = ∏ i = 1 m f ( p i c i ) = ∏ i = 1 m p i c i = n f(n)=\prod_{i=1}^m f(p_i^{c_i})=\prod_{i=1}^m p_i^{c_i}=n f(n)=i=1mf(pici)=i=1mpici=n,性质6成立。

有关积极函数还有许多内容,并可延伸出狄利克雷卷积、莫比乌斯反演以及一系列相关的快速求和问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谷神星ceres

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

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

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

打赏作者

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

抵扣说明:

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

余额充值