P3312 [SDOI2014]数表
[SDOI2014]数表
题目描述
有一张
思路点拨
我们先考虑对于两个数
我们;令
这个式子需要富比尼定理优化。可以
但是这道题目还没有写完,因为有
我们可以将全部的询问离线,按照
时间复杂度
放出一份代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
const int mod=(1ll<<31);
int T;
const int MAXN=1e5+10,N=1e5;
struct node{
int x,id;
bool friend operator<(const node &A,const node &B){
return A.x<B.x;
}
}f[MAXN];
struct getans{
int x,y,w;
int id;
bool friend operator<(const getans &A,const getans &B){
return A.w<B.w;
}
}q[MAXN];
int ans[MAXN],mu[MAXN];
bool vis[MAXN];
void init(){
for(int i=1;i<=N;i++){
f[i].id=i;
mu[i]=1;
for(int j=i;j<=N;j+=i)
f[j].x+=i;
}
sort(f+1,f+N+1);
for(int i=2;i<=N;i++){
if(vis[i]) continue;
mu[i]=-1;
for(int j=i*2;j<=N;j+=i){
vis[j]=1;
mu[j]=-mu[j];
if(j%(i*i)==0) mu[j]=0;
}
}
}
int g[MAXN];
int lowbit(int x){
return x&(-x);
}
void add(int x,int w){
for(int i=x;i<=N;i+=lowbit(i))
g[i]=(g[i]+w)%mod;
}
int query(int x){
int cnt=0;
for(int i=x;i;i-=lowbit(i))
cnt=(cnt+g[i])%mod;
return cnt;
}
signed main(){
init();
int T=read();
for(int i=1;i<=T;i++){
q[i].x=read(),q[i].y=read(),q[i].w=read();
q[i].id=i;
}
sort(q+1,q+T+1);
int last=1;
for(int i=1;i<=T;i++){
while(last<=N&&f[last].x<=q[i].w){
int d=f[last].id;
for(int T=d;T<=N;T+=d)
add(T,(f[last].x*mu[T/d]+mod*100)%mod);
last++;
}
int l=1,r=0,n=q[i].x,m=q[i].y;
while(l<=min(n,m)){
r=min(n/(n/l),m/(m/l));
ans[q[i].id]=(ans[q[i].id]+(query(r)-query(l-1)+mod)*(n/l)%mod*(m/l))%mod;
l=r+1;
}
}
for(int i=1;i<=T;i++) cout<<ans[i]<<endl;
return 0;
}
分类:
数学 / 莫比乌斯反演
, 数学
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现