数学板块学习之因子个数及因子和

对于 n = p 1 x 1 p 2 x 2 ⋯   p k x k n=p_1^{x_1}p_2^{x_2}\cdots\ p_k^{x_k} n=p1x1p2x2 pkxk
因子数: ( x 1 + 1 ) ( x 2 + 1 ) ⋯ ( x k + 1 ) = Π i = 1 k ( x i + 1 ) (x_1+1)(x_2+1)\cdots(x_k+1)=\Pi_{i=1}^{k}{(x_i+1)} (x1+1)(x2+1)(xk+1)=Πi=1k(xi+1)
因子和: p 1 x 1 + 1 − 1 p 1 − 1 p 2 x 2 + 1 − 1 p 2 − 1 ⋯ p k x k + 1 − 1 p k − 1 = Π i = 1 k ( p i x i + 1 − 1 p i − 1 ) \frac{p_1^{x_1+1}-1}{p_1-1}\frac{p_2^{x_2+1}-1}{p_2-1}\cdots\frac{p_k^{x_k+1}-1}{p_k-1}=\Pi_{i=1}^{k}{(\frac{p_i^{x_i+1}-1}{p_i-1})} p11p1x1+11p21p2x2+11pk1pkxk+11=Πi=1k(pi1pixi+11)

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

int get_sum(int n){
    int ans = 1;
    for(int i = 2; i*i <= n; ++i){
        if(n%i == 0){
            int res = 1;
            while(n%i == 0){
                res *= i;
                n /= i;
            }
            ans *= (res-1)/(i-1);
        }
        
    }
    if(n>1) ans *= (n+1);
    return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值