POJ 3904 Sky Code (容斥原理)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
4
2 3 4 5
4
2 4 6 8
7
2 3 4 5 7 6 8
Sample Output
1
0
34
题意:给定n个数,从n个数找出四个数,使这四个数的最大公约数为1,找出有多少对这样的组合。
题解:四个数的公约数为1,并不代表四个数两两互质。比如(2,3,4,5)公约数为1,但是
2和4并不互质。从反面考虑,先求出四个数公约数不为1的情况个数,用总的方案个数
减去四个数公约数不为1的情况个数就是所求。
求四个数公约数不为1的情况个数,需要将N个数每个数质因数分解,纪录下所有不同
的素因子所能组成的因子(就是4个数的公约数),并统计构成每种因子的素因子个数,
和因子总数。然后再计算组合数。比如说因子2的个数为a,则四个数公约数为2的个数
为C(a,4),因子3的个数为b,则四个数公约数为3的个数为C(b,4),因子6(2*3)的个
数为c,则四个数公约数的个数为C(c,4)。
但是公约数为2的情况中或者公约数为3的情况中可能包括公约数为6的情况,相当于几
个集合求并集,这就需要容斥定理来做。
容斥原理应用,以2为因子的数有a个,3为因子 的数有b个,6为因子的数有c个,
n个数不互质的四元组个数为C(a,4)+C(b,4)-C(c,4) (含奇数个素因子的加,偶数个素因子的减),
下面就是统计出2,3,5这些因子的倍数的个数,对C(a,4)容斥!
代码:弄清思路以后就很好做了,一环扣一环,用二进制进行枚举,很棒!
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
const int maxn=1e4+;
typedef long long ll; //因为c(5000,4)=26010428123750。所以要用 long long 能long long 就 long long
ll c(ll n)
{
return n*(n-)*(n-)*(n-)/;
}
ll prime[],cnt=,num[maxn][]; //0代表数目 1代表奇偶性
void solve(ll n)
{
//memset(prime,0,sizeof(prime)); //这句话和cin同时用会超时 所以涉及到复杂度全用scanf
cnt=;
for(int i=;i<=sqrt(n);i++)
{
if(n%i==)
{
prime[cnt++]=i;
while(n%i==)
n/=i;
}
}
if(n!=)
prime[cnt++]=n; //这里一定注意是n不是i
for(int i=;i<(<<cnt);i++) //i=0无意义 num[1][] 无意义
{
ll flag=,tmp=;
for(int j=;j<cnt;j++)
{
if(i&(<<j))
{
flag++;
tmp*=prime[j];
}
}
//其实这里可以优化一下 若大于2500的数作为因子 他的倍数不可能够四个的
//不过是否优化对时间无影响
num[tmp][]++; //数目
num[tmp][]=flag;//奇偶性
}
}
int main()
{
ll n,data;
while(scanf("%lld",&n)!=EOF) //是lld
{
memset(num,,sizeof(num));
for(int i=;i<n;i++)
{
scanf("%lld",&data);
solve(data);
}
ll ans=c(n);
for(int i=;i<=maxn/;i++)
{
if(num[i][]) //0代表数目
{
if(num[i][]&) //1代表flag奇偶性
ans-=c(num[i][]); //注意这里用的是数目
//不是num[i][1] 更不是num[1]什么 是num[i][0]
else
ans+=c(num[i][]);
}
}
printf("%lld\n",ans);
}
return ;
}
POJ 3904 Sky Code (容斥原理)的更多相关文章
- [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 ...
- poj3904 Sky Code —— 唯一分解定理 + 容斥原理 + 组合
题目链接:http://poj.org/problem?id=3904 Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ Sky Code 莫比乌斯反演
N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO for ...
- POJ 3904(容斥原理)
Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1750 Accepted: 545 Descripti ...
- 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 ...
- Sky Code
Sky Code 给出n个数,求选出4个数组合,使其gcd为1,,\(n<=10000\),每个数\(<=10000\). 解 理解1:容斥原理 注意到Mobius反演式子不好写出,于是我 ...
- Sky Code(poj3904)
Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2085 Accepted: 665 Descripti ...
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...
随机推荐
- No message found under code ' for locale 'en'.
1.如果你使用eclipse创建的工程是class和src分开的,那么资源属性文件一定要放在src目录以内.2.属性文件名的写法:messages_zh_CN.properties (中文)messa ...
- [Unity 游戏设计的元素]
1.核心游戏机制 2.主题 3.功能集合 4.可能的附加功能 5.备用主题创意
- The Joys of Conjugate Priors
The Joys of Conjugate Priors (Warning: this post is a bit technical.) Suppose you are a Bayesian rea ...
- 周期串(Periodic Strings,UVa455)
解题思路: 对一个字符串求其最小周期长度,那么,最小周期长度必定是字符串长度的约数,即最小周期长度必定能被字符串长度整除 其次,对于最小周期字符串,每位都能对应其后周期字串的每一位, 即 ABC A ...
- ios 关联对象运用 objc_setAssociatedObject
点按钮的时候,给alertView添加一个关联对象(被点击这个按钮), objc_setAssociatedObject(alert, &kRepresentedObject, sender, ...
- cmd批处理常用符号详解
cmd批处理常用符号详解 作者: 字体:[增加 减小] 类型:转载 我们在批处理编写过程中经常遇到各种特殊符号,很多朋友不是很清楚cmd中特殊符号的含义,这里简单的介绍下,方便需要的朋友 1.@一 ...
- meclipse中project facet问题
meclipse中project facet问题 (2012-02-14 14:59:48) 转载▼ 标签: 杂谈 分类: 技术 一般出现在从别处import的项目上,只有项目文件夹上有红叉,其他地方 ...
- 移动端bug总结
1. 移动端按钮点击蓝框去除 button,input[type="button"] { outline:none; }
- android-解决 Android N 上 报错:android.os.FileUriExposedException
解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN ...
- 常用工具和API的网站收集
1.小图标在线查找 https://www.iconfinder.com/ 2.在线做图,Flowchart流程图,BPMN图,Org组织结构图等 http://www.processon.com/ ...