bzoj3944 Sum 杜教筛
模板题,注意杜教筛化式子的技巧:
1、构造求和函数
2、利用积性函数约数性质
3、做差算出单项
4、约数倍数转化贡献
5、分块求商
码:
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
#define M 3000000
#define ll long long
int tot,i,j,T,su[M+5];
ll ans,phe[M+5],n[999],N,mhe[M+5],mu[M+5],phi[M+5];
bool he[M+5];
map<int,ll>pma;
map<int,int>mma;
void eular()
{mu[1]=phi[1]=1;for(i=2;i<=N;i++){if(!he[i]){su[++tot]=i; phi[i]=i-1;mu[i]=-1;}for(j=1;j<=tot&&su[j]*i<=N;j++){int k=su[j]*i;he[k]=1;if(i%su[j]==0){phi[k]=su[j]*phi[i];mu[k]=0;break;}else{phi[k]=phi[i]*phi[su[j]];mu[k]=-mu[i];} }}for(i=1;i<=N;i++)phe[i]=phe[i-1]+phi[i],mhe[i]=mhe[i-1]+mu[i];
}
ll dfs1(ll o)
{if(o<=N)return phe[o]; if(pma[o])return pma[o];
ll lin=o*(1+o)/2;
ll l;
for(l=2;l<=o;l++)
{
ll oo=o/l;
lin-=((o/oo)-l+1)*dfs1(oo) ;
l=o/oo;
}
pma[o]=lin;
return lin;
}
int dfs2(int o)
{ if(o<=N)return mhe[o]; if(mma[o])return mma[o];
int lin=1;
unsigned int l;
for(l=2;l<=o;l++)
{
int oo=o/l;
lin-=((o/oo)-l+1)*dfs2(oo);
l=o/oo;
}
mma[o]=lin;
return lin;
}
int main()
{scanf("%d",&T);
for(i=1;i<=T;i++)
{
scanf("%lld",&n[i]);
N=max(n[i],N);
}
N=pow(N,2.000/3) ;
eular();
for(i=1;i<=T;i++)
{
printf("%lld ",dfs1(n[i]));
printf("%d\n",dfs2(n[i]));
}
}
bzoj3944 Sum 杜教筛相关推荐
- bzoj3944: Sum//杜教筛
bzoj3944: Sum 前几天的blog,没写完,现在补上吧- 题意 求莫比乌斯函数和欧拉函数的前缀和.N<=2^31-1.T(<=10)组询问. 题解 杜教筛. 然而这篇博客不是写题 ...
- BZOJ3944 Sum 杜教筛
看完题一副不可做的样子 默默点开了题解 发现是杜教筛 就花了半天学习了一下 先说下杜教筛 可以在优于线性的复杂度内求出积性函数的前缀和 下求 ∑ni=1f(i) \sum_{i=1}^nf(i) 令 ...
- bzoj 3944: Sum 杜教筛
本来以为这种东西只能O(N)线性筛,但是大千世界,无(sang)奇(xin)不(bing)有(kuang),确实存在更快的算法. 省选的时候rzz讲这种东西在国内OI称为杜教筛,用来求数论函数的前缀和 ...
- 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)= ...
- 杜教筛模板(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 ...
- P4213-[模板]杜教筛(Sum)
正题 题目链接:https://www.luogu.com.cn/problem/P4213 题目大意 给出nnn,求∑i=1nφ(i)\sum_{i=1}^n\varphi(i)i=1∑nφ(i) ...
- luoguP4213 【模板】杜教筛(Sum)杜教筛
链接 luogu 思路 为了做hdu来学杜教筛. 杜教筛模板题. 卡常数,我加了register居然跑到不到800ms. 太深了. 代码 // luogu-judger-enable-o2 #incl ...
- 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛
题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N" ...
- 数论函数 - 莫比乌斯函数与莫比乌斯反演 - 基础杜教筛
原文链接http://www.cnblogs.com/zhouzhendong/p/8627380.html 省选后发现我数学好差.于是先从数论开始学习. 如果发现本文有任何错误,欢迎留言指正. 本文 ...
最新文章
- redis启动后出现WARNING you have Transparent Huge Pages (THP) support enabled in your kernel问题...
- wordpress进阶教程(十九):创建自定义的找回密码页面
- (47)FPGA同步复位与异步复位(异步复位同步释放)
- jquery 时间相减获取天数_Js中处理日期加减天数
- sql 通过游标 拆分xml结构
- JHipster简介
- Hadoop报错 Failed to locate the winutils binary in the hadoop
- ArcMAP 设置图层透明度
- IDEA 创建java项目
- 微信绑定的卡服务器,微信亲属卡有什么作用 微信亲属卡怎么绑定
- 【小游戏】2D游戏你比划我来猜(unity和陀螺仪交互)
- HTML页面跳转及参数传递
- C语言的内存问题总结
- excel计算机一级打不开,excel打不开的原因及解决方法
- Java萌新入门的第一篇文章
- 56.com flash http://www.56.com/deux4_97177389.swf
- 什么是带状线、微带线?参考平面与传输线那些事儿
- HTML 6种空格nbsp;ensp;emsp;thinsp;zwnj;zwj;空白空格的区别
- photoswiper
- Proxifier Socks5 代理(内网访问、远程办公)
热门文章
- Python 基础知识学习笔记——OpenCV(1)
- vrm华为_华为-笔记本电脑如何安装FusionCompute虚拟化平台?
- 回望2019,展望2020
- 创建选修专业表oracle,数据库及数据表的创建与删除 (Oracle实验)
- oracle19c 安装权限_Oracle 数据库安装系列一:19C 软件安装和补丁升级
- Spark MLlib中的协同过滤
- Python统计TXT词云
- android 高质量游戏,你玩过几款?2013年度十大安卓热门游戏大盘点
- sendfile实现文件服务器,sendfile
- 计算机word设置渐变填充,Word中鲜为人知的渐变效果设置