【bzoj4804】欧拉心算 解题报告
【bzoj4804】欧拉心算
Description
给出一个数字\(N\),计算
\]
Input
第一行为一个正整数\(T\),表示数据组数。
接下来\(T\)行为询问,每行包含一个正整数\(N\)。
\(T\le 5000,N\le 10^7\)
Output
按读入顺序输出答案
很多方法
可以推式子到
\]
然后把后面的筛出来就行了
也可以得到
\]
然后搞就行了
后面的式子化解用到了定义
\]
#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】欧拉心算 解题报告的更多相关文章
- 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 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 ...
随机推荐
- ADO.net中DataTable的应用
一.思维导图 二.知识点描述 (1)构造函数 DataTable() 不带参数初始化DataTable类的新实例 DataTable(string tableName) 用指定的表名初始化DataT ...
- python打印对象的所有可操作内容
print('\n'.join(['%s:%s' % item for item in 对象.__dict__.items()]))
- Vue Cli 中使用 Karma / Chrome 执行样式相关单元测试
在 GearCase 开源项目 中,我使用了 Vue Cli 的默认测试框架.因此和样式相关的东西,都无法进行测试.因为它并不类似于无头浏览器,而是存在于虚拟内存之中. 现状 在如下 button.s ...
- Netty源码分析第7章(编码器和写数据)---->第4节: 刷新buffer队列
Netty源码分析第七章: 编码器和写数据 第四节: 刷新buffer队列 上一小节学习了writeAndFlush的write方法, 这一小节我们剖析flush方法 通过前面的学习我们知道, flu ...
- 机器学习(一):记一次k一近邻算法的学习与Kaggle实战
本篇博客是基于以Kaggle中手写数字识别实战为目标,以KNN算法学习为驱动导向来进行讲解. 写这篇博客的原因 什么是KNN kaggle实战 优缺点及其优化方法 总结 参考文献 写这篇博客的原因 写 ...
- excel窗口独立显示/单独显示
天赋异禀的亲,一看就懂!
- IOS statusBarStyle 设置
在项目info.plist文件中有 View controller-based status bar appearance 属性. 当设置为NO时 通过 [UIApplication sharedAp ...
- caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: 没有那个文件或目录
You need to generate caffe.pb.h manually using protoc as follows. # In the directory you installed C ...
- 第三次作业— C++计算器项目的初始部分
作业题目: C++计算器项目的初始部分 仓库 代码: Scan.h #ifndef SCAN_H #define SCAN_H #include<string> #include<i ...
- BETA-7
前言 我们居然又冲刺了·七 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 经过分析发现,为提升速率估测的可靠性,目前最具可改造性的参数为帧间间隔,调用参 ...