【BZOJ4804】欧拉心算
Description
给定数字\(n\)(\(n\le 10^7\)),求:
\]
多组数据输入,数据组数\(T\le5000\)。
Solution
简单的一题,直接推导:
\sum_{i=1}^n\sum_{j=1}^n\varphi(\gcd(i,j))&=\sum_{d=1}^n\varphi(d)\sum_{i=1}^{\lfloor \frac n d\rfloor}\sum_{j=1}^{\lfloor \frac n d\rfloor}[\gcd(i,j)==1]\\
&=\sum_{d=1}^n\varphi(d)(2\sum_{i=1}^{\lfloor \frac n d\rfloor}\varphi(i)-1)
\end{aligned}
\]
发现后面一个括号带下取整,直接求出\(\varphi\)的前缀和,数论根号分块即可。
Code
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=10000001;
bool vis[N];
int p[N],pcnt;
ll phi[N];
void sieve(){
phi[1]=1;
for(int i=2;i<N;i++){
if(!vis[i]){
p[++pcnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=pcnt&&i*p[j]<N;j++){
int x=i*p[j];
vis[x]=true;
if(i%p[j]==0){
phi[x]=phi[i]*p[j];
break;
}
phi[x]=phi[i]*(p[j]-1);
}
}
for(int i=2;i<N;i++) phi[i]+=phi[i-1];
}
int main(){
sieve();
int T,n;
ll ans;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
ans=0;
for(int i=1,j;i<=n;i=j+1){
j=n/(n/i);
ans+=(2LL*phi[n/i]-1)*(phi[j]-phi[i-1]);
}
printf("%lld\n",ans);
}
return 0;
}
【BZOJ4804】欧拉心算的更多相关文章
- BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)
一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...
- [BZOJ4804]欧拉心算
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(\gcd(i,j))\] 多组数据,\(n\le10^7\). sol SBT 单组数据\(O(\sqrt n ...
- BZOJ4804: 欧拉心算(莫比乌斯反演 线性筛)
题意 求$$\sum_1^n \sum_1^n \phi(gcd(i, j))$$ $T \leqslant 5000, N \leqslant 10^7$ Sol 延用BZOJ4407的做法 化到最 ...
- bzoj4804: 欧拉心算 欧拉筛
题意:求\(\sum_{i=1}^n\sum_{j=1}^n\phi(gcd(i,j))\) 题解:\(\sum_{i==1}^n\sum_{j=1}^n\sum_{d=1}^n[gcd(i,j)== ...
- 并不对劲的bzoj4804:欧拉心算
题目大意 \(t\)(\(t\leq5000\))组询问,每次询问给出\(n\)(\(n\leq10^7\)),求: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(gcd(i, ...
- [BZOJ4804]欧拉心算:线性筛+莫比乌斯反演
分析 关于这道题套路到不能再套路了没什么好说的,其实发这篇博客的目的只是为了贴一个线性筛的模板. 代码 #include <bits/stdc++.h> #define rin(i,a,b ...
- 【bzoj4804】欧拉心算 解题报告
[bzoj4804]欧拉心算 Description 给出一个数字\(N\),计算 \[\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\] Input 第一行为 ...
- 【BZOJ4804】欧拉心算 莫比乌斯反演+线性筛
[BZOJ4804]欧拉心算 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10 ...
- BZOJ_4804_欧拉心算_欧拉函数
BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...
- bzoj 4804 欧拉心算 欧拉函数,莫比乌斯
欧拉心算 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 408 Solved: 244[Submit][Status][Discuss] Descr ...
随机推荐
- js数组的比较
如果两个数组元素个数都相等,但排序不同,那么它两个相等吗?结果肯定是否定的.但如果先调用sort()方法进行排序,结果就是true了. console.log(a.sort().toString()= ...
- Java中final与 static final 修饰的常量的区别
喵喵开车,新手上路,多多关照.有任何错误请在评论区指出. ...........................................我是万恶的分界线( • ̀ω•́ )✧......... ...
- 学习笔记 | Set
目录 Set Set 前言 不会数据结构选手 当几乎没写过什么数据结构的菜鸡遇上了毒瘤的splay和treap 时间正一点一点地被续走TAT 听说set有时候可以替代treap和splay 那么菜鸡L ...
- ffplay.exe操作方式
大牛博客: 博文名称:[总结]FFMPEG视音频编解码零基础学习方法 博文链接:http://blog.csdn.net/leixiaohua1020/article/details/15811977 ...
- HTTP-HTTPS区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...
- Alpha版本测试文档
概述 本次测试主要是为了测试是否有导致崩溃的bug,验证是否符合软件基本需求. 测试环境 硬件测试:安卓系统手机,安卓平板. 测试人员 赖彦谕,金哉仁. 实际进度 2015/11/6 – 2015/1 ...
- 20172325 2016-2017-2 《Java程序设计》第四周学习总结
20172325 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 1.对类.对象.声明变量的定义和属性有了进一步的了解 2.学会如何编写一个类并运用到需要的程 ...
- beta冲刺(5/7)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4 ...
- “吃神么,买神么”的第二个Sprint计划(计划过程内容)
“吃神么,买神么”项目Sprint计划 ——6.1(第二天)立会内容与进度 团队组员各自任务: 陈键.吴舒婷:继续完善前台设局与布局 林欢雯.冯美欣:开展后台的界面的设计与布局 任务的进度: 陈键. ...
- KEIL C51代码优化详细分析
阅读了<单片机与嵌入式系统应用>2005年第10期杂志<经验交流>栏目的一篇文章<Keil C51对同一端口的连续读取方法>(原文)后,笔者认为该文并未就此问题进行 ...