POJ 3904
第一道莫比乌斯反演的题。
建议参看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;
}
POJ 3904的更多相关文章
- POJ 3904 Sky Code (容斥原理)
B - Sky Code Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 3904(莫比乌斯反演)
POJ 3904 题意: 从n个数中选择4个数使他们的GCD = 1,求总共有多少种方法 Sample Input 4 2 3 4 5 4 2 4 6 8 7 2 3 4 5 7 6 8 Sample ...
- POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
http://poj.org/problem?id=3904 题意:给一些数,求在这些数中找出四个数互质的方案数. 莫比乌斯反演的式子有两种形式http://blog.csdn.net/out ...
- 【POJ 3904】 Sky Code
[题目链接] http://poj.org/problem?id=3904 [算法] 问题可以转化为求总的四元组个数 - 公约数不为1的四元组个数 总的四元组个数为C(n,4),公约数不为1的四元组个 ...
- [poj 3904] sky code 解题报告(组合计算+容斥原理)
题目链接:http://poj.org/problem?id=3904 题目大意: 给出一个数列,询问从中取4个元素满足最大公约数为1的方案数 题解: 很显然,ans=总的方案数-最大公约数大于1的4 ...
- POJ 3904 Sky Code
题意:给定n个数ai, ai <= 10000, n <= 10000, 从中选出4个数要求gcd为1,这样的集合有多少个? 分析:首先总共集合nCr(n, 4) = n*(n-1)*(n ...
- POJ 3904(容斥原理)
Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1750 Accepted: 545 Descripti ...
- POJ 3904 (莫比乌斯反演)
Stancu likes space travels but he is a poor software developer and will never be able to buy his own ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
随机推荐
- ST Nucleo mbed套件开发 一 MBED环境使用 以Nucleo-F401为例 (二)
MBED环境.使用起来总是那么的别扭可能很多人不习惯用在线编程器,大多数做ST32开发的都比較喜欢KEIL或者IAR,有没有什么好的方法呢.我们能够本地编译MBEDproject, 答案是肯定了.下来 ...
- <监听器模式>在C++ 与 Java 之间实现的差异
前言: 关于各种语言孰优孰劣的讨论在软件界就是个没完没了的话题,今天我决定也来掺和下. 只是我想探讨的不是哪种语言的性能怎样,钱途怎样.而是站在语言本身特性的基础上中肯地比較探讨.由于如今工作用的是C ...
- 使用fatjar来实现将包括第三方jar包的项目到处成一个jar包供其它程序使用
一.在线安装fat jar 在线安装步骤: eclipse菜单条 help >software updates >Search for new features to install> ...
- CC2540 与 CC2541 差别 1
CC2540 的 1234 PIN 是 USB 功能,4 PIN 是 USB 的电压输入引脚. CC2541 没有 USB 功能.它的 1234 PIN 是 I2C 功能,为了与 CC2540 引脚兼 ...
- UVa 170 - Clock Patience
题目:Clock Patience游戏,将52张扑克牌,按时钟依次分成13组(中心一组),每组4张全都背面向上, 从中间组最上面一张牌開始.翻过来设为当前值,然后取当前值相应组中最上面的背过去的牌翻过 ...
- PHP别名引用错误:“The use statement with non-compound name … has no effect”
别名概述 PHP5.3+支持命名空间:namespace,命名空间的一个重要功能是能够使用别名(alias)来引用一个符合规则的名字. 命名空间支持3中形式的别名引用(或称之为引入)方式:类(clas ...
- Yii学习笔记之中的一个(安装与基础环境的配置)
0. 下载yii http://www.yiiframework.com/download/ 1. 訪问 basic 基础文件夹下的 web 文件夹 出现图1 的错误 : Invalid Con ...
- Java类的根Object
一.Object类介绍 Object全名java.lang.Object,java.lang包在使用的时候无需显示导入,编译时由编译器自动导入.Object类是类层次结构的根,Java中所有的类从根本 ...
- C# 正则表达式
C# 正则表达式 正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类 ...
- Centos上JDK的安装搭建
一.下载 yum search java|grep jdk //查找所有jdk版本 二.选择安装1.8 yum install java-1.8.0-openjdk-src-debug.x86_64 ...