1.所有因子个数
如果一个数是因数,就不断除这个数,保存这个因子次方的数 temp++;
运用所有因子个数计算公式(见上图),保存因子个数的 ans不断乘( temp+1 )。
注意 :
当最后,在 x 不断除因数得到的值有两种情况:
- x == 1,这说明 x 没有其他因子了。
- x != 1, 这时 x 为其一个素数因子(且这个因子大于 根号x ),所以最后再乘(1+1)。
代码学习链接
ll dcpCount(ll x){//所有因子的个数(包括1)
ll ans = 1;
for(ll i = 2; i * i <= x; i++){
if(x % i == 0){
ll temp = 0;
while(x % i == 0){
x /= i;
temp++;
}
ans *= (temp+1);//运用上面的公式,计算所有因子的个数
}
}
if(x > 1) ans *= 2;
return ans;
}
---------------------
作者:sxh759151483
来源:CSDN
原文:https://blog.csdn.net/sxh759151483/article/details/80137459
版权声明:本文为博主原创文章,转载请附上博文链接!
2.所有因子因子和 (包括1)
思想同上,也是公式的代码实现
图1.
待补
图一这个公式是等比数列求和;
ll dcpSum(ll x){//所有因子的和(包括1)
ll ans = 1;
for(ll i = 2; i * i <= x; i++){
if(x % i == 0){
ll temp = 1;
while(x % i == 0){
x /= i;
temp *= i;
}
ans *= (temp * i - 1) / (i - 1);//对每一个素数因子按图一公式求积。
}
}
if(x > 1) ans *= (1 + x);
return ans;
}
---------------------
作者:sxh759151483
来源:CSDN
原文:https://blog.csdn.net/sxh759151483/article/details/80137459
版权声明:本文为博主原创文章,转载请附上博文链接!