博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ]4805: 欧拉函数求和
阅读量:5096 次
发布时间:2019-06-13

本文共 1382 字,大约阅读时间需要 4 分钟。

解题思路类似

题目大意:求[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
#define ll long long#define MN 1600000#define MOD 2333333struct edge{edge*nx;ll f;int x;}*h[MOD];ll f[MN+5];int p[MN+5],pn;bool u[MN+5];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+1)>>1,n};h[n%MOD]=np; for(int i=2,ls;i<=n;i=ls+1)ls=n/(n/i),np->f-=(ls-i+1)*cal(n/i); return np->f;}int main(){ int n,i,j; scanf("%d",&n); for(f[1]=1,i=2;i<=MN;++i) { if(!u[i])p[++pn]=i,f[i]=i-1; for(j=1;i*p[j]<=MN&&(u[i*p[j]]=1);++j) if(i%p[j])f[i*p[j]]=f[i]*(p[j]-1); else{f[i*p[j]]=f[i]*p[j];break;} f[i]+=f[i-1]; } printf("%lld",cal(n));}

 

转载于:https://www.cnblogs.com/ditoly/p/BZOJ4805.html

你可能感兴趣的文章
Mysql
查看>>
前端html
查看>>
网络编程
查看>>
关于“设计模式”和“设计程序语言”的一些闲话
查看>>
(一二九)获取文件的MineType、利用SSZipArchive进行压缩解压
查看>>
python学习4 常用内置模块
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
ResolveUrl的用法
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>