博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演
阅读量:5236 次
发布时间:2019-06-14

本文共 1807 字,大约阅读时间需要 6 分钟。

题目:bzoj 2005 

     洛谷 P1447 

首先,题意就是求 ∑(1 <= i <= n) ∑(1 <= j <= m) [ 2 * gcd(i,j) -1 ];

方法1:容斥原理

枚举每个数作为 gcd 被算了几次;

对于 d ,算的次数 f[d] 就是 n/d 和 m/d 中互质的数的对数;

所有数对的个数是 (n/d) * (m/d),减去其中 gcd 是2,3……的数对个数,这里就可以用到之前算出来的答案;

比如要减去这之中 gcd 是2的数对,那么减去 f[d/2] 即可,而且因为定义原因不会重复减;

然后 *2 -1 即可。

代码如下:

#include
#include
#include
#include
using namespace std;typedef long long ll;int const maxn=1e5+5;int n,m;ll f[maxn],ans;int main(){ scanf("%d%d",&n,&m); if(n>m)swap(n,m); for(int g=n;g;g--) { f[g]=(ll)(n/g)*(m/g);//(ll) //加括号!因为要下取整 for(int i=2;i*g<=n;i++)f[g]-=f[i*g];// ans+=2*tmp; ans+=(g*2-1)*f[g]; } printf("%lld\n",ans); return 0;}

方法2:莫比乌斯反演

原式 ∑(1 <= i <= n) ∑(1 <= j <= m) [ 2 * gcd(i,j) - 1 ]  ( n = min(m,n) )

由于 n = ∑ ( d|n ) φ(d)  (感性理解:约分……)

 所以原式变成 ∑(1 <= i <= n) ∑(1 <= j <= m) [ 2 * ∑ ( d|i , d|j ) φ(d) - 1]

把 d 提前,-1提出去 ∑( 1 <= d <= n ) [ 2 * φ(d) * ∑(1 <= i <= n|d ) ∑(1 <= j <= m|d ) 1 ] - n*m

也就是 2 * ∑( 1 <= d <= n ) [ φ(d) * (n/d) * (m/d) ] - n*m

注意 φ(1) = 1!

代码如下:

#include
#include
#include
#include
using namespace std;typedef long long ll;int const maxn=1e5+5;int n,m,p[maxn],phi[maxn],cnt;ll ans;void init(){ phi[1]=1;//! for(int i=2;i<=n;i++) { if(!phi[i])p[++cnt]=i,phi[i]=i-1; for(int j=1;j<=cnt&&i*p[j]<=n;j++) { phi[i*p[j]]=phi[i]*(p[j]-1); if(i%p[j]==0)phi[i*p[j]]=phi[i]*p[j]; } }}int main(){ scanf("%d%d",&n,&m); if(n>m)swap(n,m); init(); for(int g=1;g<=n;g++) ans+=2*(ll)phi[g]*(n/g)*(m/g); ans-=(ll)n*m; printf("%lld\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/Zinn/p/9384805.html

你可能感兴趣的文章
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
md5sum命令详解
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用...
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>