第一道莫比乌斯反演的题。

建议参看http://www.isnowfy.com/mobius-inversion/

摘其中部分

证明的话感觉写起来会比较诡异,大家意会吧
说一下这个经典题目:令R(M,N)=1≤x≤M,1≤y≤N中 gcd(x,y)=1 的个数
我们说G(z)表示gcd(x,y)是z的倍数的个数(以后都省略1≤x≤M,1≤y≤N的前提),换句话说z|gcd(x,y)的个数,那么很显然G(z)=⌊M/z⌋∗⌊N/z⌋,令F(z)表示gcd(x,y)=z的个数,

所以G(z)=∑(F(z)+F(2∗z)+F(3∗z)...),于是我们得到F(z)=∑(G(z)∗μ(z)+G(2∗z)∗μ(2∗z)...),从而得到了我们最终的答案ans=∑z≥1⌊M/z⌋∗⌊N/z⌋∗μ(z)

这里,只需要把z=1,通过求F(z)即可。

上面之所以成立,因为莫比乌斯的另一种形式(我未找到,但确实成立)

f(d) = ∑ g(n) (n % d == 0)

g(d) = ∑  mu[n / d] * f(n) (n %d == 0)

好像目前遇到的都是经典题目的类型了。。。

给出求莫比乌斯函数的代码:

void initial(){
int i,j;
for(i=1;i<N;i++) mobi[i]=1,vis[i]=false;
for(i=2;i<N;i++) {
if(vis[i]) continue;
for(j=i;j<N;j+=i){
vis[j]=true;
if((j/i)%i==0){
mobi[j]=0; continue;
}
mobi[j]=-mobi[j];
}
}
}

  

POJ 代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10005
#define LL __int64
using namespace std; int ID[N];
int mobi[N],cnt[N];
bool vis[N];
LL myc[N]; void initial(){
int i,j;
for(i=1;i<N;i++) mobi[i]=1,vis[i]=false;
for(i=2;i<N;i++) {
if(vis[i]) continue;
for(j=i;j<N;j+=i){
vis[j]=true;
if((j/i)%i==0){
mobi[j]=0; continue;
}
mobi[j]=-mobi[j];
}
}
myc[0]=myc[1]=myc[2]=myc[3]=0;
myc[4]=1;
for(int i=5;i<N;i++)
myc[i]=myc[i-1]*(LL)i/(LL)(i-4); //这里求的其实是组合数
} int main(){
int n; int mx,tmp;
initial();
while(scanf("%d",&n)!=EOF){
mx=-1;
memset(ID,0,sizeof(ID));
for(int i=0;i<n;i++){
scanf("%d",&tmp);
ID[tmp]++;
mx=max(mx,tmp);
}
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=N;i++){
for(int k=i;k<N;k+=i){
if(ID[k])
cnt[i]+=ID[k];
}
}
LL ans=0;
for(int i=1;i<=mx;i++){
ans=ans+(LL)mobi[i]*myc[cnt[i]];
}
printf("%I64d\n",ans);
}
return 0;
}

  

最新文章

  1. canvas.drawBitmap()频繁调用导致应用崩溃问题
  2. 模拟image的ajaxPrefilter与ajaxTransport处理
  3. win10 pro 1511 激活成功
  4. windows编程中c语言知识回顾
  5. ThinkPHP公共配置文件与各自项目中配置文件组合的方法
  6. HDU 3951 (博弈) Coin Game
  7. python学习笔记25(文件管理 os包)
  8. C#-datagridview隐藏行头
  9. uva 484 - The Department of Redundancy Department
  10. text-overflow: ellipsis;省略号颜色设置
  11. Nginx CORS实现JS跨域
  12. 百度Web App在线生成平台Site App体验
  13. 设计模式——建造者模式/生成器模式(C++实现)
  14. English Voice of &lt;&lt;Something just like this&gt;&gt;
  15. 写个shell脚本依次运行每个程序半小时
  16. 深度点评五种常见WiFi搭建方案
  17. LINUX查看网卡UUID
  18. NodeJS下的Mongodb操作
  19. jq dom不存在时绑定事件
  20. sencha touch tpl 实现按钮功能

热门文章

  1. oracle schema彻底理解
  2. Codeforces Gym 100015F Fighting for Triangles 状态压缩DP
  3. 利用flashback transaction query新特性进行事务撤销
  4. oracle 11gR2 如何修改 private ip
  5. mysql_udf_http(根据mysql表自动触发发送http请求)
  6. Flask_URL和视图
  7. Eclipse中重置(还原)GIT分支
  8. zabbix部署监控端(server)以及页面优化
  9. jq——动画
  10. pythone 学习笔记(粗略)