解题思路类似莫比乌斯函数之和

题目大意:求[1,n]内的欧拉函数$\varphi$之和。($n<=2*10^{9}$)

思路:令$ M(n)=\sum_{i=1}^{n}\varphi (i)  $,题目所求即为$ M(n) $。

由于$ \sum_{d|n} \varphi (d)=n $ ,所以$ \sum_{i=1}^{n} \sum_{d|i} \varphi (d)=\frac{n(n+1)}{2} $

令$ i=kd $,则有$ \sum_{i=1}^{n} \sum_{d|i} \varphi (d)= \sum_{k=1}^{n} \sum_{d=1}^{\left \lfloor n/k \right \rfloor} \varphi (d) = \sum_{k=1}^{n} M(\left \lfloor n/k \right \rfloor) =\frac{n(n+1)}{2} $

那么$ M(n)=\frac{n(n+1)}{2}-\sum_{i=2}^{n} M(\left \lfloor n/i \right \rfloor) $

由于$ \left \lfloor n/i \right \rfloor $的取值只有$ O(\sqrt{n}) $种,预处理出前$ n^{\frac{2}{3}} $的$ M(n) $,然后记忆化搜索,可以证明总时间复杂度为$ O(n^{\frac{2}{3}}) $。

#include<cstdio>
#define ll long long
#define MN 1600000
#define MOD 2333333
struct edge{edge*nx;ll f;int x;}*h[MOD];
ll f[MN+];
int p[MN+],pn;
bool u[MN+];
ll cal(int n)
{
if(n<=MN)return f[n];
for(edge*i=h[n%MOD];i;i=i->nx)if(i->x==n)return i->f;
edge*np=new edge;*np=(edge){h[n%MOD],1LL*n*(n+)>>,n};h[n%MOD]=np;
for(int i=,ls;i<=n;i=ls+)ls=n/(n/i),np->f-=(ls-i+)*cal(n/i);
return np->f;
}
int main()
{
int n,i,j;
scanf("%d",&n);
for(f[]=,i=;i<=MN;++i)
{
if(!u[i])p[++pn]=i,f[i]=i-;
for(j=;i*p[j]<=MN&&(u[i*p[j]]=);++j)
if(i%p[j])f[i*p[j]]=f[i]*(p[j]-);
else{f[i*p[j]]=f[i]*p[j];break;}
f[i]+=f[i-];
}
printf("%lld",cal(n));
}

[BZOJ]4805: 欧拉函数求和的更多相关文章

  1. BZOJ 4805: 欧拉函数求和 杜教筛

    https://www.lydsy.com/JudgeOnline/problem.php?id=4805 给出一个数字N,求sigma(phi(i)),1<=i<=N https://b ...

  2. 【刷题】BZOJ 4805 欧拉函数求和

    Description 给出一个数字N,求sigma(phi(i)),1<=i<=N Input 正整数N.N<=2*10^9 Output 输出答案. Sample Input 1 ...

  3. BZOJ4805: 欧拉函数求和(杜教筛)

    4805: 欧拉函数求和 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 614  Solved: 342[Submit][Status][Discus ...

  4. 【BZOJ4805】欧拉函数求和(杜教筛)

    [BZOJ4805]欧拉函数求和(杜教筛) 题面 BZOJ 题解 好久没写过了 正好看见了顺手切一下 令\[S(n)=\sum_{i=1}^n\varphi(i)\] 设存在的某个积性函数\(g(x) ...

  5. poj3090欧拉函数求和

    E - (例题)欧拉函数求和 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB     ...

  6. HDU2824-The Euler function-筛选法求欧拉函数+求和

    欧拉函数: φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1.p2-pk为n的所有素因子.比如:φ(12)=12*(1-1/2)(1-1/3)=4.可以用类似求素数的筛 ...

  7. BZOJ 4802 欧拉函数

    4802: 欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Outp ...

  8. BZOJ 4802 欧拉函数(Pollard_Rho)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4802 [题目大意] 已知N,求phi(N),N<=10^18 [题解] 我们用P ...

  9. [bzoj 2818]欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 枚举最大公约数,对于每一个质数p,只需要求出1<=x,y<=(n/p)范 ...

随机推荐

  1. Alpha冲刺博客合集

    Alpha冲刺序列: Alpha冲刺Day1:Alpha No.1 Alpha冲刺Day2:Alpha No.2 Alpha冲刺Day3:Alpha No.3 Alpha冲刺Day4:Alpha No ...

  2. 在VS2017下配置OpenGL

    这个方法适合初学者使用,较为简单方便. 第一,你的VS2017一定要安装了C/C++开发组件 可以打开Visual Studio Installer来查看 另外,确定你有安装NuGet包管理器,在单个 ...

  3. python clock装饰器 计算函数执行时间,执行结果及传入的参数

    import time import functools def clock(func): @functools.wraps(func)#还原被装饰函数的__name__和__doc__属性 def ...

  4. Beta冲刺Day7

    项目进展 李明皇 今天解决的进度 部分数据传递和使用逻辑测试 林翔 今天解决的进度 服务器端查看个人发布的action,修改已发布消息状态的action,仍在尝试使用第三方云存储功能保存图片 孙敏铭 ...

  5. Tornado介绍及自定义组件

    Tornado 的性能是相当优异的,因为它试图解决一个被称之为"C10k"问题,就是处理大于或等于一万的并发.一万呀,这可是不小的量 条件:处理器为 AMD Opteron, 主频 ...

  6. pandas 数据分析使用

    https://github.com/Erick-LONG/data_analysis/blob/master/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%20%E9%8 ...

  7. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  8. 《javascript设计模式与开发实践》阅读笔记(16)—— 状态模式

    状态模式 会区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变.比如电灯的开关是开还是关,在外界的表现就完全不同. 电灯例子 按照常规思路,实现一个电灯就是构造一个电灯类,然后指定一下它的 ...

  9. dede使用心得

    Question one: 最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用.所以为了方便教程的发布,特意在网 ...

  10. CentOS 7 PHP-redis扩展安装,浏览器不显示数据及redis无法储存数据常见问题解决办法

    首先使用php -m 可以查看到自己安装了那些扩展. 1.使用wget下载redis压缩包 wget https://github.com/phpredis/phpredis/archive/deve ...