数论 因子和问题

因子和公式 推导

我们设 f ( x ) f(x) f(x) 为 x 的因数和, x x x 为正数
通过唯一分解定理,可以得到:
x = p 1 e 1 × p 2 e 2 × . . . × p k e k x = p_1^{e_1} \times p_2^{e_2} \times ...\times p_k^{e_k} x=p1e1×p2e2×...×pkek
x x x 的最小质因子为 p p p, 因子 p p p 的个数为 e e e,那么 x = p e ∗ x ′ x = p^e * x\prime x=pex

易得:
x x x 的因子中 p p p 的个数等于 0 的时候, 因子和为 f ( x ′ ) f(x\prime) f(x)。推广至一般情况,当 x x x 的因子中 e e e 的时候,因子和为 p e ∗ f ( x ′ ) p^e * f(x\prime) pef(x),所以 x x x 的所以因子和可以表示成:
f ( x ) = ( p 0 + p 1 + . . . + p e ) ∗ f ( x ′ ) = p e + 1 − 1 p − 1 ∗ f ( x ′ ) f(x)=(p^0 + p^1 + ... + p^e) * f(x\prime) = \frac{p^{e + 1} - 1}{p - 1} * f(x\prime) f(x)=(p0+p1+...+pe)f(x)=p1pe+11f(x)

f ( x ′ ) f(x\prime) f(x) 可以通过相同方法递归计算。最后可以表示成一系列等比数列和的乘积:
f ( x ) = ∐ i = 1 k p i e i + 1 − 1 p i − 1 f(x) = \coprod\limits_{i=1}^k \frac{p_i^{e_i + 1} - 1}{p_i - 1} f(x)=i=1kpi1piei+11

个人板子

#define int long long
int n;
int p[N], num[N], idx;
void div(int x)
{
    for (int i = 2; i * i <= x; i++)
    {
        if (x % i == 0)
        {
            p[++idx] = i;
            while (x % i == 0)
                num[idx]++, x /= i;
        }
    }
    if (x > 1)
        p[++idx] = x, num[idx] = 1;
}
int ksm(int a, int b)
{
    int ans = 1;
    while (b)
    {
        if (b & 1)
            ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
void solve()
{
    idx = 0;
    cin >> n;
    if (n == 0)
    {
        cout << 0 << '\n';
        return;
    }
    div(n);
    int ans = 1;
    for (int i = 1; i <= idx; i++)
    {
        int a = p[i], b = num[i] + 1;
        if ((a - 1) % mod)
        {
            int tt = (ksm(a, b) - 1 + mod) % mod;
            tt = tt * ksm(a - 1, mod - 2) % mod;
            ans = ans * tt % mod;
        }
        else
            ans = ans * b % mod;
    }
    cout << ans << '\n';
}
signed main()
{
    buff;
    solve();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joanh_Lan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值