莫比乌斯反演的另外一种形式:
如果有:
则有:
这里的 通常是小于等于一个界限,也就是题目中所给定的 ""。
特别地,当 时,,也可以理解为容斥系数为 的容斥。
对第三个条件进行莫比乌斯反演,得:
其中 为 为 的倍数时的答案。
对于 ,每次可以做一下背包,用前缀和优化易做到 ,总时间复杂度就是 ,注意到 为 的时候不用跑背包,所以这个远远跑不满。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#define int long long
#define mp std::make_pair
typedef long long ll;
const ll mod = 998244353;
void cAdd(ll &x, ll y) { x = (x + y >= mod) ? (x + y - mod) : (x + y); }
ll Add(ll x, ll y) { return (x + y >= mod) ? (x + y - mod) : (x + y); }
ll Mod(ll x) { return (x+mod)%mod; }
typedef std::pair<int, int> pii;
template <typename T> T Max(T x, T y) { return x > y ? x : y; }
template <typename T> T Min(T x, T y) { return x < y ? x : y; }
template <typename T>
T& read(T& r) {
r = 0; bool w = 0; char ch = getchar();
while(ch < '0' || ch > '9') w = ch == '-' ? 1 : 0, ch = getchar();
while(ch >= '0' && ch <= '9') r = r * 10 + (ch ^ 48), ch = getchar();
return r = w ? -r : r;
}
const int N = 500010;
int n, m, L[N], R[N], l[N], r[N];
int ct, prime[N], mu[N];
bool vis[N];
void pre() {
vis[1] = 1; mu[1] = 1;
for(int i = 2; i <= 500000; ++i) {
if(!vis[i]) {
prime[++ct] = i;
mu[i] = -1;
}
for(int j = 1; j <= ct && i * prime[j] <= 500000; ++j) {
vis[i * prime[j]] = 1;
if(i % prime[j] == 0) mu[i * prime[j]] = 0;
else mu[i * prime[j]] = mu[i] * mu[prime[j]];
if(i % prime[j] == 0) break;
}
}
}
ll f[N], g[N], ans;
signed main() {
pre();
read(n); read(m);
for(int i = 1; i <= n; ++i) read(L[i]), read(R[i]);
for(int d = 1; d <= m; ++d) {
if(!mu[d]) continue ;
for(int i = 1; i <= n; ++i) l[i] = (L[i]+d-1)/d, r[i] = R[i]/d;
int s = m/d;
for(int i = 0; i <= s; ++i) g[i] = 1;
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= s; ++j) f[j] = 0;
for(int j = l[i]; j <= s; ++j)
f[j] = Add(g[j-l[i]], (j>=r[i]+1)?Mod(-g[j-r[i]-1]):0);
g[0] = 0;
for(int j = 1; j <= s; ++j) g[j] = Add(g[j-1], f[j]);
}
ans = Add(ans, Mod(mu[d] * g[s] % mod));
}
printf("%lld\n", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?