bzoj 2005: [Noi2010]能量采集 筛法||欧拉||莫比乌斯
2005: [Noi2010]能量采集
Time Limit: 10 Sec Memory Limit: 552 MB
[Submit][Status][Discuss]
Description
Input
仅包含一行,为两个整数n和m。
Output
仅包含一个整数,表示总共产生的能量损失。
Sample Input
5 4
【样例输入2】
3 4
Sample Output
36
【样例输出2】
20
对于100%的数据:1 ≤ n, m ≤ 100,000。
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define pi (4*atan(1.0))
- const int N=1e5+,M=4e6+,inf=1e9+;
- ll g[N];
- int main()
- {
- int x,y,z,i,t;
- while(~scanf("%d%d",&x,&y))
- {
- ll ans=;
- for(i=min(x,y);i>=;i--)
- {
- g[i]=(ll)x/i*(y/i);
- for(t=i+i;t<N;t+=i)
- g[i]-=g[t];
- ans+=g[i]*(*i-);
- }
- printf("%lld\n",ans);
- }
- return ;
- }
欧拉函数:
n m n m min(n,m)
证明过程: ∑ ∑ gcd(i,j)=∑ ∑ ∑ Ø(d) = ∑ Ø(d) * (n/d) *(m/d)
i=1 j=1 i=1 j=1 d|gcd(i,j) d=1
分块写,复杂度 预处理O(1e5)+sqrt(min(n,m));
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define pi (4*atan(1.0))
- const int N=1e5+,M=1e6+,inf=1e9+;
- const ll INF=1e18+;
- ll p[N],ji;
- bool vis[N];
- ll phi[N];
- ll sum[N];
- void get_eular(int n)
- {
- ji = ;
- phi[]=;
- memset(vis, true, sizeof(vis));
- for(int i = ; i <= n; i++)
- {
- if(vis[i])
- {
- p[ji ++] = i;
- phi[i] = i - ;
- }
- for(int j = ; j < ji && i * p[j] <= n; j++)
- {
- vis[i * p[j]] = false;
- if(i % p[j] == )
- {
- phi[i * p[j]] = phi[i] * p[j];
- break;
- }
- else
- phi[i * p[j]] = phi[i] * phi[p[j]];
- }
- }
- }
- int main()
- {
- get_eular(N);
- memset(sum,,sizeof(sum));
- for(int i=;i<=1e5;i++)
- sum[i]=sum[i-]+phi[i];
- ll x,y;
- while(~scanf("%lld%lld",&x,&y))
- {
- if(x>y)swap(x,y);
- ll ans=;
- for(int L=,R=;L<=x;L=R+)
- {
- R=min(x/(x/L),y/(y/L));
- ans+=(sum[R]-sum[L-])*(x/L)*(y/L);
- }
- printf("%lld\n",*ans-x*y);
- }
- return ;
- }
莫比乌斯:模版题;
gcd(i,j)==k,枚举k;
复杂度O(min(n,m)sqrt(n));
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define esp 0.00000000001
- #define pi 4*atan(1)
- const int N=1e5+,M=1e7+,inf=1e9+,mod=1e9+;
- ll mu[N], p[N], np[N], cnt, sum[N];
- void init() {
- mu[]=;
- for(int i=; i<N; ++i) {
- if(!np[i]) p[++cnt]=i, mu[i]=-;
- for(int j=; j<=cnt && i*p[j]<N; ++j) {
- int t=i*p[j];
- np[t]=;
- if(i%p[j]==) { mu[t]=; break; }
- mu[t]=-mu[i];
- }
- }
- for(int i=;i<N;i++)
- sum[i]=sum[i-]+mu[i];
- }
- ll getans(int b,int d)
- {
- ll ans=;
- for(int L=,R=;L<=b;L=R+)
- {
- R=min(b/(b/L),d/(d/L));
- ans+=(ll)(sum[R]-sum[L-])*(b/L)*(d/L);
- }
- return ans;
- }
- int main()
- {
- init();
- int b,d,k;
- while(~scanf("%d%d",&b,&d))
- {
- if(b>d)swap(b,d);
- ll ans=;
- for(int i=;i<=b;i++)
- ans+=getans(b/i,d/i)*i;
- printf("%lld\n",*ans-(ll)b*d);
- }
- return ;
- }
bzoj 2005: [Noi2010]能量采集 筛法||欧拉||莫比乌斯的更多相关文章
- 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...
- BZOJ 2005: [Noi2010]能量采集
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 3312 Solved: 1971[Submit][Statu ...
- BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= ...
- BZOJ 2005 [Noi2010]能量采集 (数学+容斥 或 莫比乌斯反演)
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 4493 Solved: 2695[Submit][Statu ...
- BZOJ2005: [Noi2010]能量采集(欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...
- 【刷题】BZOJ 2005 [Noi2010]能量采集
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题意: 思路: 首先要知道一点是,某个坐标(x,y)与(0,0)之间的整数点的个数为gcd ...
- BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]
题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...
- BZOJ 2005 [Noi2010]能量采集 ——Dirichlet积
[题目分析] 卷积一卷. 然后分块去一段一段的求. O(n)即可. [代码] #include <cstdio> #include <cstring> #include < ...
随机推荐
- Keepalived + MySQLfailover + GTIDs 高可用
架构图 10.1.1.207 mysql master + keepalived 10.1.1.206 mysql slave ( backup master ) + ke ...
- 创建自己的Spring Boot Starter
抽取通用模块作为项目的一个spring boot starter.可参照mybatis的写法. IDEA创建Empty Project并添加如下2个module,一个基本maven模块,另一个引入sp ...
- Arbitrage - poj 2240 (Bellman-ford)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17374 Accepted: 7312 Description Ar ...
- MIC的异步传输
关于signal和wait,属于异步传输的语法,即CPU端无需等待offload语句返回,即可异步运行下面的代码.一般用于启动MIC代码段后,并发执行CPU代码,达到同步执行的目的.另外一种用法是使用 ...
- 小技巧:怎样以另外的Windows用户执行SSMS
可能会碰到这种问题.你须要在一台机器上面使用不同的Windows账户连接到SQL Server做測试.默认情况下,你须要用不同的Windows账户登录然后測试. 实际上不须要每一个windows登陆. ...
- ubuntu 及 postgredql 安装配置小坑摘录
ubuntu 16.04.1 安装 Ubuntu Server 16.04.1安装配置图解教程,按教程修改局域网static IP 开启sftp必须 解决SSH服务拒绝密码,之后才能欢乐地使用file ...
- python实现身份证识别
github: 人脸联合语音身份认证:https://github.com/tsstss123/faceUnionVoiceRecognition 身份证识别简易版:https://github.co ...
- linux下nginx php配置redis
之前一直遇到,Module compiled with module API=20090626这个坑问题!!! NOTICE: PHP message: PHP Warning: PHP Star ...
- ASIHTTPRequest-Cookie的使用
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=93220&page=e&#a 持久化cookie ASIHTTPReques ...
- java类型系统知识点总结
下面的东西是在一天内用了三个编辑器写的,所以风格有点不太统一 一:下午完成 主要看了java的类型系统,具体如下. 1)接口 作为又一个引用类型,接口可以说是一种特殊的类,可以有属性和行为(字段和方法 ...