https://www.luogu.org/problemnew/show/UVA11424

原本以为是一道四倍经验题来的。

因为输入的n很多导致像之前那样 \(O(n)\) 计算变得非常荒谬。

那么我们就需要引入一个整除分块!

首先预处理欧拉函数的前缀和,然后丢进分块里面搞一搞。

那么就是 \(O(n+t\sqrt{n})\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long #define N 4000005
int phi[N],pri[N],cntpri=0;
bool notpri[N]; ll prefix[N]; void sieve_phi(int n) {
notpri[1]=phi[1]=1;
prefix[0]=0;
prefix[1]=1;
for(int i=2; i<=n; i++) {
if(!notpri[i])
pri[++cntpri]=i,phi[i]=i-1;
for(int j=1; j<=cntpri&&i*pri[j]<=n; j++) {
notpri[i*pri[j]]=1;
if(i%pri[j])
phi[i*pri[j]]=phi[i]*phi[pri[j]];
else {
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
}
prefix[i]=prefix[i-1]+phi[i];
}
} ll sumfenkuai(ll n) {
ll ans=0;
for(ll l=1,r; l<=n; l=r+1) {
if(n/l!=0) {
r=min(n/(n/l),n);
} else {
//n/l==0,意味着l>n,所有的后面的下整都是0,分成同一块
r=n;
break;
} //phi=?
//sum(phi)=?
//c=n/l=n/r //ans=sum_d=1^n:(sum(d)*c)
ans+=(n/l)*(n/l)*(prefix[r]-prefix[l-1]);
}
return ans;
} int main() {
sieve_phi(100000+5);
int n;
while(cin>>n) {
ll ans=sumfenkuai(n);
cout<<ans<<endl;
}
}

最新文章

  1. php 序列化、json
  2. 工作随笔——Swift中的Range和一些字符操作
  3. 词法分析程序 LEX和VC6整合使用的一个简单例子
  4. ASP.NET防御XSS跨站攻击
  5. 向 ViewPager 中添加 包含 ListView 的 Fragment
  6. jenkins2 pipeline高级
  7. 计算两条直线的交点(C#)
  8. maven插件的生命周期的详细说明(两)
  9. docker cs50 ide 安装
  10. 解决libVLC无法响应鼠标消息
  11. shiro 和 跨域过滤器冲突
  12. Redis 当成数据库在使用和可靠的分布式锁,Redlock 真的可行么?
  13. odoo 打印单
  14. 控制台console对象常用的一些方法
  15. mysql homedir迁移
  16. plsql 只能识别32位的oracle解决办法
  17. [转]C++中的三种继承public,protected,private
  18. 微信小程序组件switch
  19. 读《分布式一致性原理》CURATOR客户端3
  20. 【Django】依赖auth.user的数据库迁移,以及admin用户非交互式创建

热门文章

  1. 在jquery的ajax方法中的success中使用return要注意的问题
  2. BestCoder #47 1001&amp;amp;&amp;amp;1002
  3. iOS 优化方案浅析
  4. Quick UDP Internet Connections
  5. spawn类expect方法详解
  6. UIView封装动画--iOS 利用系统提供方法来做弹性运动
  7. 解决访问google的问题
  8. elasearch基础教程
  9. &lt;ZZ&gt;Linux rpm 命令参数使用详解[介绍和应用]
  10. java基础汇总