【bzoj4804】欧拉心算

Description

给出一个数字\(N\),计算

\[\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))
\]

Input

第一行为一个正整数\(T\),表示数据组数。

接下来\(T\)行为询问,每行包含一个正整数\(N\)。

\(T\le 5000,N\le 10^7\)

Output

按读入顺序输出答案


很多方法

可以推式子到

\[\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor^2\sum_{k|T}\varphi(k)\mu(\frac{T}{k})
\]

然后把后面的筛出来就行了

也可以得到

\[\sum_{d=1}^n(\varphi(d)(2\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(i)-1))
\]

然后搞就行了

后面的式子化解用到了定义

\[\sum_{i=1}^k\sum_{j=1}^i[\gcd(i,j)=1]=\sum_{i=1}^k\varphi(i)
\]


#include <cstdio>
#include <cctype>
#define ll long long
const int BufferSize=1<<16;
namespace Fast{
const int LEN=10000000;
char inp[LEN],outp[LEN];
int tmp[20];
int inpos,outpos;
void init(){
fread(inp,1,LEN,stdin);
inpos=0; outpos=0;
}
char GetChar(){return inp[inpos++];}
int read(){
int ret=0; char ch=GetChar();
while (ch<'0'||ch>'9') ch=GetChar();
while ('0'<=ch&&ch<='9') ret=ret*10+ch-'0',ch=GetChar();
return ret;
}
void PutChar(char ch){outp[outpos++]=ch;}
void print(ll x){
int pos=0;
if (!x) tmp[++pos]=0;
else
while (x) tmp[++pos]=x%10,x/=10;
for (int i=pos;i>=1;--i) PutChar(tmp[i]+'0');
}
void Print(){fwrite(outp,1,outpos,stdout);}
}
#define ll long long
const int N=1e7+1;
int pri[N],ispri[N],a[N],b[N],cnt;
ll f[N];
void init()
{
b[1]=f[1]=1;
for(register int i=2;i<N;i++)
{
if(!ispri[i])
{
pri[++cnt]=i;
f[i]=i-2;
a[i]=1;
b[i]=i;
}
for(register int d,j=1,x;j<=cnt&&i*pri[j]<N;j++)
{
x=i*pri[j];
ispri[x]=1;
if(i%pri[j])
{
a[x]=1;
b[x]=pri[j];
f[x]=f[i]*f[pri[j]];
}
else
{
a[x]=a[i]+1;
b[x]=b[i]*pri[j];
d=i/b[i];
if(d==1)
f[x]=b[i]/pri[j]*(pri[j]-1)*(pri[j]-1);
else
f[x]=f[d]*f[b[i]*pri[j]];
break;
}
}
}
for(int i=2;i<N;i++) f[i]+=f[i-1];
}
int main()
{
Fast::init();
init();
int T,n;T=Fast::read();
while(T--)
{
n=Fast::read();
ll ans=0;
for(register int d,l=1,r;l<=n;l=r+1)
{
d=n/l,r=n/d;
ans+=1ll*d*d*(f[r]-f[l-1]);
}
Fast::print(ans),Fast::PutChar(' ');
}
Fast::Print();
return 0;
}

2018.12.19

【bzoj4804】欧拉心算 解题报告的更多相关文章

  1. BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)

    一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...

  2. [BZOJ4804]欧拉心算

    题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(\gcd(i,j))\] 多组数据,\(n\le10^7\). sol SBT 单组数据\(O(\sqrt n ...

  3. BZOJ4804: 欧拉心算(莫比乌斯反演 线性筛)

    题意 求$$\sum_1^n \sum_1^n \phi(gcd(i, j))$$ $T \leqslant 5000, N \leqslant 10^7$ Sol 延用BZOJ4407的做法 化到最 ...

  4. 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)== ...

  5. 并不对劲的bzoj4804:欧拉心算

    题目大意 \(t\)(\(t\leq5000\))组询问,每次询问给出\(n\)(\(n\leq10^7\)),求: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(gcd(i, ...

  6. [BZOJ4804]欧拉心算:线性筛+莫比乌斯反演

    分析 关于这道题套路到不能再套路了没什么好说的,其实发这篇博客的目的只是为了贴一个线性筛的模板. 代码 #include <bits/stdc++.h> #define rin(i,a,b ...

  7. 【BZOJ4804】欧拉心算 莫比乌斯反演+线性筛

    [BZOJ4804]欧拉心算 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10 ...

  8. BZOJ_4804_欧拉心算_欧拉函数

    BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...

  9. bzoj 4804 欧拉心算 欧拉函数,莫比乌斯

    欧拉心算 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 244[Submit][Status][Discuss] Descr ...

随机推荐

  1. elementUI实现前端分页

    按照他的文档来写分页,最主要的是el-table里面展示的数据怎么处理 <el-table :data="AllCommodityList.slice((currentPage-1)* ...

  2. [文章存档]Kudu 的 Debug Console 窗口如何查看更多文件

    链接:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-h ...

  3. c++ 整数和字符串的转化

    一.string转int的方式 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 采用标准库中atoi函数. "; int a = ...

  4. [奇葩问题] Error Domain=NSURLErrorDomain Code=-1003

    问题描述: 新上线的产品,ios同事拿着一串报错来找我,日志如下:err =Error Domain=NSURLErrorDomain Code=-1003 "未能找到使用指定主机名的服务器 ...

  5. 互评Alpha版本—SkyHunter

    1.根据NABCD评论作品:   N(Need,需求):飞机大战题材的游戏对80,90后的人来说算是童年的记忆,可以在闲暇之余打开电脑玩一会儿.但是面向初中生,高中生的话这种PC小游戏可能不会那么适合 ...

  6. 第三次作业---excel导入数据库及显示

    好吧首先承认这次作业失败了,而且我并不知道原因.另外,我也没有采用PowerDesigner 设计所需要的数据库,代码就用了全部的时间.感觉自己就像一个刚学会爬着走路的小孩去参加一百一十米跨栏,能不能 ...

  7. 第一个spring冲刺

    第一天商量讨论出我们选择的题目为四则运算,虽然在上一个学期已经做过了,但是还有完善的地方,希望能够做出创新,另外下面的燃尽图是我们预测的3个阶段的进度,按情况不同可能实际的情况也不同,但是我们会尽量跟 ...

  8. 30_数据库_第30天java_jdbc_(DBUtils)_讲义

    今日内容介绍 1.DBUtils 2.连接池 01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操 ...

  9. 如何查看Maven项目的jar包依赖

    问题 十年以前写java项目总会干这么一个事情: 调包. java项目往往依赖了很多第三方jar包,而这些jar包又有他自己依赖的第三方jar包,从而就能形成一个依赖树. 而程序运行要把这些所有的依赖 ...

  10. Delphi中比较两个对象是否一致及地址是否相同[转]

    在delphi中,C#也是如此,对象的地址与对象变量(引用)的地址不是同一个概念.要加以区别. procedure TForm1.btn1Click(Sender: TObject); var    ...