[P3935] Calculating

容易发现题目要求的 (f(x)) 就是 (x) 的不同因子个数

现在考虑如何求 (sum_{i=1}^n f(i)),可以考虑去算每个数作为因子出现了多少次,很容易发现是 ([n/i])

于是整除分块一下就可以了

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int mod = 998244353;

int f(int n) {
    int l=1,ans=0;
    while(l<=n) {
        int r=n/(n/l);
        (ans+=(r-l+1)*(n/l))%=mod;
        l=r+1;
    }
    return ans;
}

signed main() {
    int l,r;
    cin>>l>>r;
    cout<<(mod+f(r)-f(l-1))%mod<<endl;
}
原文地址:https://www.cnblogs.com/mollnn/p/12250248.html