BZOJ 2005 容斥原理】的更多相关文章

思路: 题目让求的是 Σgcd(i,j) (i<=n,j<=m) n,m不同 没法线性筛 怎么办? 容斥原理!! f[x]表示gcd(i,j)=x的个数 g[x]为 存在公约数=x 的数对(i,j)的个数 g(x)=(n/x)*(m/x) 那么f[x]就是 g(x)-f(2*x)-f(3*x)--- -f(i*x) (i*x<=min(n,m)) 从后往前算 (这个显然吧 要不怎么减) Σf(x)*2 -n*m就是答案啦~~ 复杂度的话嘛 O(n)+O(n/2)+O(n/3)-..+O(…
题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005   洛谷 P1447 https://www.luogu.org/problemnew/show/P1447 首先,题意就是求 ∑(1 <= i <= n) ∑(1 <= j <= m) [ 2 * gcd(i,j) -1 ]: 方法1:容斥原理 枚举每个数作为 gcd 被算了几次: 对于 d ,算的次数 f[d] 就是 n/d 和 m/d 中互质的…
思路: 同BZOJ 2005 http://blog.csdn.net/qq_31785871/article/details/54314774 //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define int long long int a,b,d,mn,f[1000050]; signed main(){ scanf("%lld%lld%lld",&a…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2005 分析:首先易得ans=∑gcd(x,y)*2+1 然后我就布吉岛了…… 上网搜了下题解,设f[i]表示gcd(x,y)=i的实数对的个数,那么ans=∑f[i]*i*2+1 在设g[i]表示i是(x,y)公约数的个数,则g[i]=[m/i]+[n/i] 那么由容斥原理可以得到f[i]=g[i]-∑f[i*j] (2<=j<min([m/i],[n/i])) 那么就倒推就gg了…… O…
这题设$f(i)$为$gcd(i,j)=x$的个数,根据容斥原理,我们只需减掉$f(i×2),f(i×3)\cdots$即可 那么这道题:$$ans=\sum_{i=1}^n(f(i)×((i-1)×2+1))$$ 注意要开$longlong$,否则会炸 #include<cstdio> #include<algorithm> using namespace std; long long f[100003]; int main(){ int n,m; long long k=0;…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2005 题意:给定n和m,求 思路:本题主要是解决对于给定的t,有多少对(i,j)满足x=Gcd(i,j).有多少对呢?我们先求出有多少对的约数为x,有(n/x)*(m/x)种!那么接着就是减去约数大于x的对数.设a[x]表示Gcd为x的对数,我们现在求出的约数为x的对数,那么显然a[x]=a[x]-a[2*x]-a[3*x]-a[4*x]..注意这里求的时候要倒着枚举x. int n,…
一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) *  2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= n, 1 <= y <= m ) 的数对(x, y)个数. 这个不好求, 考虑容斥, 设f(i) 为含有公因数 i 的数对(x, y)(1 <= x <= n, 1 <= y <= m)个数 , 显然f(i) = (n / i) * (m / i). 则 g(i) = f…
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题解: http://blog.csdn.net/popoqqq/article/details/39924877 #include<cstdio> #include<algorithm> #define N 100005 using namespace std; typedef long long ll; ll phi[N],su[N],sum[N]; bool he…
题目大意:给定n和m.求Σ(1<=i<=n)Σ(1<=j<=m)GCD(i,j)*2-1 i和j的限制不同,传统的线性筛法失效了.这里我们考虑容斥原理 令f[x]为GCD(i,j)=x的数对(i,j)的个数,这个不是非常好求 我们令g[x]为存在公因数=x的数对(i,j)的个数(注意不是最大公因数!).显然有g[x]=(n/x)*(m/x) 可是这些数对中有一些的最大公因数为2d,3d,4d,我们要把他们减掉 于是终于f[x]=(n/x)*(m/x)-Σ(2*x<=i*x&l…
能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵. 由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0). 能量汇集机器…
2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 3312  Solved: 1971[Submit][Status][Discuss] Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列 有m棵,植物的横竖间距都一样,因此对于每一棵植…
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有\(n\)列,每列有\(m\)棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标\((x,y)\)来表示,其中\(x\)的范围是\(1\)至\(n\),表示是在第\(x\)列,\(y\)的范围是\(1\)至\(m\),表示是在第\(x\)列的第\(y\)棵. 由于能量汇…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题解: 一个带有容斥思想的递推.%%% 首先,对于一个点 (x,y) 在路径 (0,0)->(x,y)上,经过的点数为 GCD(x,y)-1所以改点的贡献为 2*GCD(x,y)-1            N    M那么,ANS = ∑    ∑(2*GCD(i,j)-1)           i=1 j=1显然超时.考虑到 GCD<=100000,那么是否可以求出 f[i] 表…
2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 4493  Solved: 2695[Submit][Status][Discuss] Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列 有m棵,植物的横竖间距都一样,因此对于每一棵植…
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题意:   思路: 首先要知道一点是,某个坐标(x,y)与(0,0)之间的整数点的个数为gcd(x,y),这样一来每个坐标损失的能量为2*gcd(x,y)-1. 所以在这道题目中要计算的就是   f(d)表示gcd(x,y)=d的对数,那么F(d)表示d|gcd(x,y)的对数. 根据反演可以得到, 那么这道题的答案就是, #include<iostream> #include<al…
2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MB[Submit][Status][Discuss] Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列 有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范…
//By SiriusRen #include <cstdio> using namespace std; int n,m,a[1005]; typedef long long ll; ll C[2005][2005],f[2005][2005],g[2005],mod=1000000007ll; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++)scanf("%d",&am…
[Noi2010]能量採集 Time Limit: 10 Sec  Memory Limit: 552 MB Submit: 2324  Solved: 1387 [id=2005">Submit][id=2005">Status][Discuss] Description 栋栋有一块长方形的地.他在地上种了一种能量植物,这样的植物能够採集太阳光的能量.在这些植物採集能量后,栋栋再使用一个能量汇集机器把这些植物採集到的能量汇集到一起. 栋栋的植物种得很整齐.一共同拥有n列,…
裸的2D gcd.ans=(Σ(d<=n)phi[d]*(n/d)*(m/d))*2-n*m; #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define int long long using namespace std; int n,m; ],su[],cnt,phi[]; void shai() { phi[]=; ;i<=;i++) {…
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵. 由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0). 能量汇集机器在汇集的过…
题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为...直线上的整点...扩展欧几里得...每\(\frac{a}{d}\)有一个解,到\(a\)你说有几个解... 套路推♂倒见学习笔记 #include <iostream> #include <cstdio> #include <cstring> #include <…
我们要求的是∑ni=1∑mj=1(2×gcd(i,j)−1) 化简得2×∑ni=1∑mj=1gcd(i,j)−n×m 所以我们现在只需要求出∑ni=1∑mj=1gcd(i,j)即可 ∑ni=1∑mj=1gcd(i,j) =∑ni=1∑mj=1∑d|gcd(i,j)ϕ(d) =∑min(n,m)d=1ϕ(d)×⌊nd⌋×⌊md⌋ 预处理ϕ的前缀和,下底分组即可 #include<cstdio> #include<iostream> #include<cstring> #i…
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵. 由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0). 能量汇集机器在汇集的过…
首先根据样例或者自己打表大概可以知道,对于询问k,答案不会超过k<<1,那么我们就可以二分答案,求当前二分的值内有多少个数不是完全平方数的倍数,这样就可以了,对于每个二分到的值x,其中完全平方数的倍数的个数为Σmiu(i)*(n/(i*i)),原理就是容斥,但是根据莫比乌斯反演应该也是能推出来的(我没推出来). 反思:开始莫比乌斯函数筛错了,后来的时候没用longlong,导致二分的时候int溢出了,这样就死循环了,找了半天错. /*******************************…
\(gcd=k+1\)时,每一个的贡献都是\(2k+1\) \(gcd=1\)时,每一个贡献为\(1\) #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<string> #include<vector> #include<…
我们发现对于一个点(x,y),与(0,0)连线上的点数是gcd(x,y)-1 那么这个点的答案就是2*gcd(x,y)-1,那么最后的答案就是所有点 的gcd值*2-n*m,那么问题转化成了求每个点的gcd值的Σ 也即:Σi<=n Σj<=m gcd(i,j) 那么首先我们知道Σphi(d) d|n=n,所以我们可以将这个式子转化成 Σi<=n Σj<=m Σ d|gcd(i,j) phi(d) 那么对于矩阵n*m来说,我们将phi(d)累加了floor(n/d)*floor(m/…
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每列 有m棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标(x, y)来表示,其中x的范围是1至n, 表示是在第x列,y的范围是1至m,表示是在第x列的第y棵. 由于能量汇集机器较大,不便移动,栋栋将它放在了 一个角上,坐标正好是(0, 0). 能量汇集机器在…
[题目分析] 卷积一卷. 然后分块去一段一段的求. O(n)即可. [代码] #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 100005 #define ll long long #define F(i,j,k) for (ll i=j;i<=k;++i) ll n,m,pr[…
注意到k=gcd(x,y)-1,所以答案是 \[ 2*(\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j))-n*m \] 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n<m: \[ \sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j) \] \[ \sum_{d=1}^{n}d*\sum_{i=1}^{n}\sum_{i=1}^{m}[gcd(i,j)==d] \] \[ \sum_{d=1}^{n}d*\sum_{i=1}^{\frac{n}{d}…
思路: 移至iwtwiioi    http://www.cnblogs.com/iwtwiioi/p/4986316.html //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define int long long ; ]; int pow(int x,int y){ ; while(y){ )res=res*x%mod; x…