P3935 学习笔记

题目传送门

我们要求

\[\sum_{k=l}^r d(k) \bmod 998244353 \]

的值。

我们记

\[S(n)=\sum_{k=1}^n d(k) \]

\[\sum_{k=l}^r d(k)=S(r)-S(l-1) \]

\[S(n)=\sum_{k=1}^n \lfloor \frac nk \rfloor \]

整除分块即可。

code
#include <bits/stdc++.h>
#define pub public:
#define pri private:
#define fri friend:
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;

using ll = long long;
using ull = unsigned long long;
using lb = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;

constexpr int mod = 998244353;
constexpr int maxn = 2e5 + 5;

ll l, r;

ll calc(ll n);

int main() {
	freopen("std.in", "r", stdin);
	freopen("std.out", "w", stdout);
	fast;
	cin >> l >> r;
	cout << (calc(r) - calc(l - 1) + mod) % mod;
	return 0;
}

ll calc(ll n){
	ll res = 0;
	for (ll pl = 1, pr; pl <= n; pl = pr + 1){
		pr = n / (n / pl);
		res = (res + (n / pl) % mod * (pr - pl + 1) % mod) % mod;
	}
	return res;
}
posted @ 2026-03-14 10:56  constexpr_ll  阅读(0)  评论(0)    收藏  举报