[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 ...
随机推荐
- 2017.12.4 JavaWeb中EL表达式的运用
<%@ page contentType="text/html; charset=gb2312"%> <html> <head> <tit ...
- fast rcnn训练自己数据小结
1.http://blog.csdn.net/hao529good/article/details/46544163 我用的训练好的模型参数是data/fast_rcnn__models/vgg_ ...
- CUDA实现数组倒序
数组倒序,将在主机上初始化的数组传输到设备上,然后用CUDA并行倒序,此时在全局内存上操作,再将结果返回到主机并验证. #include <stdio.h> #include <as ...
- java 字符串中是否有数字
http://www.cnblogs.com/zhangj95/p/4198822.html http://www.cnblogs.com/sunzn/archive/2013/07/12/31865 ...
- vuex:使用思路总结
1. vuex是什么? 是一种数据状态管理机制. 2.vuex的构成和作用: state: 存放需要被管理的属性的对象 getters: 方便在state中做集中处理,可以把state作为第一个参数 ...
- 01_14_Struts2_结果类型_result_type
01_14_Struts2_结果类型_result_type 1. result类型 result类型 说明 dispatcher 默认服务端转发jsp chain 服务端action转发 redir ...
- C++的XML编程经验――LIBXML2库使用指南
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...
- tomcat修改默认主页, 前段项目放到tomcat下,浏览器输入ip加端口后,直接到项目主页
1,将 项目 放到 tomcat 的webapps 文件夹下 2, 修改conf 下的 server.xml , 找到 <Host name="localhost" appB ...
- C++构造函数实例——拷贝构造,赋值
#define _CRT_SECURE_NO_WARNINGS //windows系统 #include <iostream> #include <cstdlib> #incl ...
- 工具类commons-io的Tailer用来监控文件
一.前言:在Linux下有使用tail命令 在Commons-io中也提供这种方法 二.他采用的是线程方式来监控文件内容的变化 1.Tailer类(采用线程的方式进行文件的内容变法) 2.Tailer ...