[NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]
题面:
思路:
稍微转化一下,可以发现,每个植物到原点连线上植物的数量,等于gcd(x,y)-1,其中xy是植物的横纵坐标
那么我们实际上就是要求2*sigma(gcd(x,y))-n*m了
又有某不知名神奇定理:一个数的所有因子的phi之和等于这个数本身,其中phi是欧拉函数
因此题目转化为求如下:

我们把式子变个型,就成了如下式子:

然后一个前缀和优化,O(n+sqrt(n))解决
Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll phi[],pri[],cnt,pre[];
void init(){
phi[]=pre[]=;ll i,j,k;
for(i=;i<=;i++){
if(!phi[i]) phi[i]=i-,pri[++cnt]=i;
for(j=;(j<=cnt)&&(i*pri[j]<=);j++){
if(i%pri[j]) phi[i*pri[j]]=phi[i]*(pri[j]-);
else{phi[i*pri[j]]=phi[i]*pri[j];break;}
}
pre[i]=pre[i-]+phi[i];
// if(i<=10) cout<<"phi "<<i<<" "<<phi[i]<<"\n";
}
}
ll n,m;ll ans;
int main(){
init();ll i,j;
n=read();m=read();
if(n>m) swap(n,m);
for(i=;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
ans+=(ll)(n/i)*(m/i)*(pre[j]-pre[i-]);
}
printf("%lld\n",ans*-n*m);
}
∑ni=1∑mi=1∑d|m⋂d|ndphi(d)
∑ni=1∑mi=1∑d|m⋂d|ndphi(d)
[NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]的更多相关文章
- 【BZOJ2005】[Noi2010]能量采集 欧拉函数
[BZOJ2005][Noi2010]能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把 ...
- 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...
- BZOJ2818: Gcd 欧拉函数求前缀和
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 如果两个数的x,y最大公约数是z,那么x/z,y/z一定是互质的 然后找到所有的素数,然后用欧拉函数求一 ...
- 欧拉函数 已经优化到o(n)
欧拉函数 ψ(x)=x*(1-1/pi) pi为x的质数因子 特殊性质(图片内容就是图片后面的文字) 欧拉函数是积性函数——若m,n互质, ψ(m*n)=ψ(m)*ψ(n): 当n为奇数时, ψ ...
- luogu P1447 [NOI2010]能量采集 欧拉反演
题面 题目要我们求的东西可以化为: \[\sum_{i=1}^{n}\sum_{j=1}^{m}2*gcd(i,j)-1\] \[-nm+2\sum_{i=1}^{n}\sum_{j=1}^{m}gc ...
- BZOJ 4815 CQOI2017 小Q的表格 欧拉函数+分块
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 题意概述:要认真概述的话这个题就出来了... 分析: 首先分析题目,认真研究一下修 ...
- bzoj 4815: [Cqoi2017]小Q的表格【欧拉函数+分块】
参考:http://blog.csdn.net/qq_33229466/article/details/70174227 看这个等式的形式就像高精gcd嘛-所以随便算一下就发现每次修改(a,b)影响到 ...
- UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)
UVA11426 GCD - Extreme (II) 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 10 100 200000 0 输出样例#1: 67 13 ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
随机推荐
- C#的接口基础教程之四 访问接口
对接口成员的访问 对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的.如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员.但由于接口支持多继承,在多继承中,如果 ...
- Webpack--模块打包器
首先介绍一个安装webpack的百度经验:https://jingyan.baidu.com/article/a3a3f811230ee58da3eb8a6e.html 推荐一个详细介绍webpack ...
- 垂直居中一个img
{ display:table-cell; text-align:center; vertical-align:middle; }
- jpeg解码库使用实例
jpeg库下载地址: http://www.ijg.org/ 交叉编译三部曲: A ./configure --host=arm-linux-gcc --prefix=/home/flying/jpe ...
- session 关于localhost和本地IP地址 不共享问题
打比方, 一个请求 localhost:8080/test/test ,一个本地Ip(172.1.1.1:8080/test/test) 1.请求localhost方式 HttpSession s ...
- Linux下重要日志及查看方式
1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息,如图1所示: 图1 /var/log/boot. ...
- 六、Shell echo命令
Shell echo命令 Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出.命令格式: echo string 您可以使用echo实现更复杂的输出格式控制. 1. ...
- gitLab 服务器搭建 (自己服务器上搭建gitLab)
环境 lunix(ubuntu) 1:添加文件 在 /etc/apt/sources.list.d/gitlab-ce.list 中添加一行 deb https://mirrors.tuna.ts ...
- yii2初步讲解 验证规则
http://www.yii-china.com/post/detail/9.html
- Flask学习笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy
Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...