P9238 [蓝桥杯 2023 省 A] 翻转硬币
(题目传送门)
受益良多啊……
设
初始化
观察发现
当
来到本题一个重要的 Trick ——
考虑
所以
那么问题就涉及到了高次整除分块。对
预处理
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=1.6e7+10;
LL n,lim,ans;
int v[N],prime[N],mu[N],sum[N],tot;
unordered_map <LL,LL> tmp;
void prework()
{
mu[1]=1;
for(int i=2; i<=lim; i++)
{
if(!v[i])
{
v[i]=i;
prime[++tot]=i;
mu[i]=-1;
}
for(int j=1; j<=tot; j++)
{
if(prime[j]>v[i] || prime[j]>lim/i)
break;
v[i*prime[j]]=prime[j];
if(i%prime[j]==0)
break;
mu[i*prime[j]]=-mu[i];
}
}
for(int i=1; i<=lim; i++)
sum[i]=sum[i-1]+mu[i];
}
LL query(LL n)
{
if(n<=lim)
return (LL)sum[n];
auto it=tmp.find(n);
if(it!=tmp.end())
return it->second;
LL res=1;
for(LL l=2,r; l<=n; l=r+1)
{
r=n/(n/l);
res-=(r-l+1)*query(n/l);
}
return tmp[n]=res;
}
signed main()
{
scanf("%lld",&n);
lim=powl(n,2.0/5)+10;
prework();
for(LL l=1,r; l<=sqrtl(n); l=r+1)
{
r=sqrtl(n/(n/(l*l)));
ans+=(query(r)-query(l-1))*(n/(l*l));
}
printf("%lld\n",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?