表示区间所有数的因子个数之和,那么求区间的因子个数之和为
如何求
这是暴力循环的代码:
因为区间中有个数是的倍数,即有个数的因子包含
区间中有\frac{n}{2}个数是2的倍数,即有\frac{n}{2}个数的因子包含2
区间中有\frac{n}{3}个数是的倍数,即有\frac{n}{3}个数的因子包含3
.....
int sum = 0;
for(int i = 1; i <= n; i ++){
    sum += (n / i);
}
cout << sum << endl;
实际上就是求,那么就用到数论分块的知识了,否则直接循环超时
总代码:
#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;


int work(int x){
    int sum = 0;
    for(int i = 1; i <= x; i ++){
        int l = i, r = (x / (x / i));
        sum += (r - l + 1) * (x / i);
        i = r;
    }
    return sum;
}
signed main(){
    HelloWorld;
    
    int l, r; cin >> l >> r;
    cout << work(r) - work(l - 1) << endl;
    return 0;
}