[中山市选2011] 完全平方数
大概是比较基础的反演了,设 f(n) 为前n个数有多少个不是xxx,g(n)=n,则:
g(n) = ∑ f(n/i^2),大概就是枚举 1~n中每个数的最大平方因子是多少了(注意极大也对,因为这里极大因子=最大因子)。
我们反演一下,可以得到 f(n) = ∑ μ(i) * g(n/i^2),(这只是莫比乌斯反演的其中一种形式),我可以来提示一下怎么推这个式子。
我们把 ∑ μ(i) * g(n/i^2) 中的所有g()用 g(n) = ∑ f(n/j^2) 展开,然后原式= ∑μ(i) * ∑ f(n/(i^2 * j^2)),我们把求和号交换,并让 i*j = d,可以得到原式= ∑f(n/d) * ∑μ(p) * [p|d]。
众所周知 e(x) = ∑ μ(y) * [y|x] = [x=1] (这个不管你用二项式定理还是数论函数卷积都可以证啦),所以原式 = f(n) 得证。
然后这个题 f(n) 可以在 O(sqrt(n)) 的复杂度下求出之后就是个傻题了2333
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e6; int zs[N/10+5],t,miu[N+5],T,n; bool v[N+5]; inline void init(){ miu[1]=1; for ( int i=2;i<=N;i++){ if (!v[i]) zs[++t]=i,miu[i]=-1; for ( int j=1,u;j<=t&&(u=zs[j]*i)<=N;j++){ v[u]=1; if (!(i%zs[j])) break ; miu[u]=-miu[i]; } } } inline ll Get(ll x){ ll an=0,now=1; for ( int i=1;now<=x;now+=(ll)(2*i+1),i++) an+=miu[i]*(ll)(x/now); return an; } int main(){ init(); scanf ( "%d" ,&T); while (T--){ scanf ( "%d" ,&n); ll l=1,r=1644934081,mid,ans=0; while (l<=r){ mid=l+r>>1; if (Get(mid)>=n) ans=mid,r=mid-1; else l=mid+1; } printf ( "%lld\n" ,ans); } return 0; } |
我爱学习,学习使我快乐
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略