bzoj3944: Sum
前几天的blog,没写完,现在补上吧…


题意

求莫比乌斯函数和欧拉函数的前缀和。N<=2^31-1。T(<=10)组询问。


题解

杜教筛。
然而这篇博客不是写题解的。这主要是因为
1.网上有很多详细题解。
2.不想打公式。
3.表达能力拙计。


注意事项

今天真是涨姿势…居然还有这种挂题方法…
首先CE的时候显示 File size limit exceeded。问了一圈,不解其意…
改了几个地方,把N调小了一点,莫名过了编译,但是RE了?
查错,发现l会变成负的,于是从

long long l l=(long long)n*(n+1)>>1;

改成了

long long l=(long long)n*(long long)(n+1)>>1;

诶怎么还是负的?想了想发现自己弱智……
再交,又CE,还是File size limit exceeded(FSLE??),二分了几发试了一下内存,发现好像是MLE①的另一种表达方式……真是十分奇怪的体验

UPD (2018.3.28):昨天又CE了一道题后…发现File size limit exceeded是因为数组用花括号初始化会占内存 QAQ

①:bz上MLE的表达方法还有TLE…大概


代码

#include<cstdio>
#include<map>
#define N 5125000
using namespace std;
typedef long long ll;
typedef pair<ll,int> pr;
pr b;
ll f[N]={0,1};
int T,a,p[N],g[N]={0,1},tot;
bool pri[N];
map<int,pr>m;
map<int,pr>::iterator s;
pr G(int n)
{if(n<N)return make_pair(f[n],g[n]);if((s=m.find(n))!=m.end())return s->second;ll l=n*((ll)n+1)>>1,t;int r=1;for(ll i=2;i<n;i=t)t=n/(n/i)+1,b=G(n/i),l-=(t-i)*b.first,r-=(t-i)*b.second;return m[n]=make_pair(l,r);
}
int main()
{for(int i=2;i<N;i++){if(!pri[i])p[tot++]=i,g[i]=-1,f[i]=i-1;for(int j=0;i*p[j]<N;j++){pri[a=i*p[j]]=1,f[a]=f[i]*p[j];if(!(i%p[j]))break;g[i*p[j]]=-g[i],f[a]-=f[i];}g[i]+=g[i-1],f[i]+=f[i-1];}scanf("%d",&T);while(T--)scanf("%d",&a),b=G(a),printf("%lld %d\n",b.first,b.second);
}

bzoj3944: Sum//杜教筛相关推荐

  1. bzoj3944 Sum 杜教筛

    模板题,注意杜教筛化式子的技巧: 1.构造求和函数 2.利用积性函数约数性质 3.做差算出单项 4.约数倍数转化贡献 5.分块求商 码: #include<iostream> #inclu ...

  2. BZOJ3944 Sum 杜教筛

    看完题一副不可做的样子 默默点开了题解 发现是杜教筛 就花了半天学习了一下 先说下杜教筛 可以在优于线性的复杂度内求出积性函数的前缀和 下求 ∑ni=1f(i) \sum_{i=1}^nf(i) 令 ...

  3. bzoj 3944: Sum 杜教筛

    本来以为这种东西只能O(N)线性筛,但是大千世界,无(sang)奇(xin)不(bing)有(kuang),确实存在更快的算法. 省选的时候rzz讲这种东西在国内OI称为杜教筛,用来求数论函数的前缀和 ...

  4. 2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)

    K Sum 推式子 Fn(k)=∑l1=1n∑l2=1n⋯∑lk=1n(gcd(l1,l2,-,lk))2=∑d=1nd2∑l1=1nd∑l2=1nd⋯∑lk=1nd(gcd(l1,l2,-,lk)= ...

  5. 杜教筛模板(P4213 【模板】杜教筛(Sum))

    P4213 [模板]杜教筛(Sum) 套路推式子 求s(n)=∑i=1nf(i)∑i=1n(f∗g)(i)=∑i=1n∑d∣if(d)g(id)=∑d=1n∑i=1⌊nd⌋f(i)g(d)=∑d=1n ...

  6. P4213-[模板]杜教筛(Sum)

    正题 题目链接:https://www.luogu.com.cn/problem/P4213 题目大意 给出nnn,求∑i=1nφ(i)\sum_{i=1}^n\varphi(i)i=1∑n​φ(i) ...

  7. luoguP4213 【模板】杜教筛(Sum)杜教筛

    链接 luogu 思路 为了做hdu来学杜教筛. 杜教筛模板题. 卡常数,我加了register居然跑到不到800ms. 太深了. 代码 // luogu-judger-enable-o2 #incl ...

  8. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N" ...

  9. 数论函数 - 莫比乌斯函数与莫比乌斯反演 - 基础杜教筛

    原文链接http://www.cnblogs.com/zhouzhendong/p/8627380.html 省选后发现我数学好差.于是先从数论开始学习. 如果发现本文有任何错误,欢迎留言指正. 本文 ...

最新文章

  1. 360浏览器如何保存html文件夹下,在360浏览器中将书签保存的详细步骤
  2. 速度快到飞起 如何跟蜻蜓的大脑学习计算?
  3. Android 基础(十六) Toast
  4. Java高并发编程:性能与线程竞争
  5. 谋定国家5G战略的基石-工信部韦乐平:经信研究网络领先
  6. Xamarin 中Visual Studio创建项目提示错误
  7. mac idea配置配置自动清除类中无用的import包
  8. sum() over()函数使用
  9. R读写Excel文件中数据的方法
  10. python主流编程语言_目前主流的编程语言有哪些?
  11. ajax提交不能获取数据,django无法收到ajax的请求数据
  12. 凌阳单片机c语言延时函数,凌阳单片机C语言(网站整理).doc
  13. seata 集群_阿里巴巴和蚂蚁金服联手搞事情: Seata 我们走~
  14. VS2015+OpenCV3.4.0+dmtx最新版联合集成开发 解析dm码
  15. mysql数据库更新数据库语句_详解MySQL数据库之更新语句
  16. 金融衍生品已成为金融革命新力量
  17. import cv2
  18. css中margin和padding设置成百分比时参照物是谁
  19. 浅学一点空间转换3D和动画知识
  20. 2019我的Java面试跳槽经历

热门文章

  1. Delphi之RegisterHotKey和UnregisterHotKey
  2. android onresume时view,Android中为什么在onResume之前(包括onResume)获取不到View的宽高?...
  3. Ubuntu设置root用户登录
  4. 两种在QGIS中制作高德铁路线型符号的方法
  5. 【计算机基础05】PowerPoint
  6. git 提交添加 emoij 文字
  7. Android Robot介绍
  8. 报表工具价格谁最优?
  9. LRANGE key start stop
  10. 运行阶段类型识别RTTI