数论——4
作者:
就是要AC
,
2021-04-29 11:01:32
,
所有人可见
,
阅读 370
4.求约数
1.试除法求约数 ---- O(n√)O(n)
vector<int> get_divisors(int n){
vector<int> res;
for(int i = 1; i <= n / i; i ++){//约数成对出现,i 和 n / i, 枚举到较小的那个即可.
if(n % i == 0){
res.push_back(i);
if(i != n / i) res.push_back(n / i);
}
}
sort(res.begin(), res.end());
return res;
}
典型例题
试除法求约数
2.约数个数
算术基本定理:任何一个正整数N都可以唯一地分解为: N = Pα11⋅Pα22⋅Pα33⋅⋅⋅PαkkP1α1·P2α2·P3α3···Pkαk
如: 12 = 2^2 * 3
36 = 2^2 * 3^2
···
约数的形式:d=Pβ11⋅Pβ22⋅Pβ33⋅⋅⋅Pβkkd=P1β1·P2β2·P3β3···Pkβk (0<=βi<=αi0<=βi<=αi)
约数个数:(α1+1)∗(α2+1)⋅⋅⋅(αk+1)(α1+1)∗(α2+1)···(αk+1)
典型例题
约数个数
3.约数之和
(P01+P11+P21+Pα11)⋅⋅⋅(P0k+P1k+P2k+Pαkk)(P10+P11+P12+P1α1)···(Pk0+Pk1+Pk2+Pkαk)
典型例题
约数之和