求一个数所有因子的个数,因子和

15 篇文章 1 订阅

B站学习视频(图片来源)
求解公式

1.所有因子个数

如果一个数是因数,就不断除这个数,保存这个因子次方的数 temp++;
运用所有因子个数计算公式(见上图),保存因子个数的 ans不断乘( temp+1 )。
注意 :
当最后,在 x 不断除因数得到的值有两种情况:

  1. x == 1,这说明 x 没有其他因子了。
  2. 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 
版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值