POJ 3904
2024-08-31 11:37:22
第一道莫比乌斯反演的题。
建议参看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;
}
最新文章
- canvas.drawBitmap()频繁调用导致应用崩溃问题
- 模拟image的ajaxPrefilter与ajaxTransport处理
- win10 pro 1511 激活成功
- windows编程中c语言知识回顾
- ThinkPHP公共配置文件与各自项目中配置文件组合的方法
- HDU 3951 (博弈) Coin Game
- python学习笔记25(文件管理 os包)
- C#-datagridview隐藏行头
- uva 484 - The Department of Redundancy Department
- text-overflow: ellipsis;省略号颜色设置
- Nginx CORS实现JS跨域
- 百度Web App在线生成平台Site App体验
- 设计模式——建造者模式/生成器模式(C++实现)
- English Voice of <;<;Something just like this>;>;
- 写个shell脚本依次运行每个程序半小时
- 深度点评五种常见WiFi搭建方案
- LINUX查看网卡UUID
- NodeJS下的Mongodb操作
- jq dom不存在时绑定事件
- sencha touch tpl 实现按钮功能