poj3904
题意:给出n(n<10000)个数,这些数<=10000,要求选出四个数字且他们的最大公约数为1的(注意:不需要两两互质),有多少种选法。
分析:
容斥原理
假设平面上有一些圆,互相之间有重叠部分,我们要求这些圆覆盖的总面积(重叠部分只记一次)。计算方法就是:加上所有被覆盖了至少1次的面积加,减去所有被覆盖了至少2次的面积,加上所有被覆盖了至少3次的面积……对于奇数的就加,对于偶数的就减,最终结果即为覆盖的总面积。把这些圆变成是集合的话,那么这个计算过程就是容斥原理。
本题可以先计算n个数字选四个总共有多少种选法,然后减去公约数不是1的。把共同具有某一素因子的数字划分到同一个集合,属于统一集合的四个数最大公约数一定大于1,如果四个数字不同时属于任何集合则最大公约数一定为1。用总的组合数减去那些四个数字同时被同一个集合包括了的组合数,所得结果即为最终答案。但是这些一个四个数字的组合可能同时属于若干个集合,因此需要在这些集合之间进行容斥原理,以求每个需要被减去的四个数字的组合都恰好被减掉一次。
有一个统计数组,统计每个部分(集合或者集合的交集)中包含多少个数字(实际应该统计四个数字组合数,但是由于组合数可以通过数字数求得,在此为了方便只统计数字数)。实际操作时可以对每个数字分解质因数,把这些质因数在统计数组中的对应位加1。同时也要计算那些集合的重叠部分,也就是同时包含若干个质因子的情况,所以把每个数字质因子的所有组合方式相乘得到的数在统计数组中的对应位加1。还要记录它包含了几个质因子(是几个集合相交的交集)。以便以后容斥原理观察奇偶性时使用。
现在我们知道了所有部分包含的数字数量,但是计算的时候注意,我们求的不是数字数量,而是四个数字组合的数量。所以容斥原理加减过程加减的是四个数字的组合数。
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; #define MAX_N 100005
#define MAX_FACTOR 16 int n, f[MAX_N];
int count[MAX_N];
int factor[MAX_FACTOR];
int prime_fac_num[MAX_N]; void input()
{
for (int i = ; i < n; i++)
scanf("%d", &f[i]);
} void make(int a)
{
int factor_cnt = ;
for (int i = ; i * i <= a; i++)
if (a % i == )
{
factor[factor_cnt++] = i;
while (a % i == )
a /= i;
}
if (a > )
factor[factor_cnt++] = a;
for (int i = ; i < ( << factor_cnt); i++)
{
int used_fac = ;
int cur_fac = ;
for (int j = ; (i >> j) > ; j++)
{
if ((i >> j) & )
{
used_fac++;
cur_fac *= factor[j];
}
}
count[cur_fac]++;
prime_fac_num[cur_fac] = used_fac;
} } long long cal(long long a)
{
return a * (a - ) * (a - ) * (a - ) / ;
} int main()
{
while (scanf("%d", &n) != EOF)
{
input();
memset(count, , sizeof(count));
memset(prime_fac_num, , sizeof(prime_fac_num));
for (int i = ; i < n; i++)
make(f[i]);
long long ans = cal(n);
for (int i = ; i <= ; i++)
{
if (prime_fac_num[i] & )
ans -= cal(count[i]);
else
ans += cal(count[i]);
}
printf("%lld\n", ans);
}
return ;
}
poj3904的更多相关文章
- [poj3904]Sky Code_状态压缩_容斥原理
Sky Code poj-3904 题目大意:给你n个数,问能选出多少满足题意的组数. 注释:如果一个组数满足题意当且仅当这个组中有且只有4个数,且这4个数的最大公约数是1,$1\le n\le 10 ...
- 【POJ3904】【P1202】水晶密码
说是莫比乌斯反演,其实只是玩儿玩儿内个miu函数而已…… 原题: wty 打算攻击 applepi 的用来存放机密数据的水晶系统. applepi 早有察觉,于是布置了一个密码系统来防备 wty ...
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...
- poj3904 Sky Code —— 唯一分解定理 + 容斥原理 + 组合
题目链接:http://poj.org/problem?id=3904 Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ3904 Sky Code【容斥原理】
题目链接: http://poj.org/problem?id=3904 题目大意: 给你N个整数.从这N个数中选择4个数,使得这四个数的公约数为1.求满足条件的 四元组个数. 解题思路: 四个数的公 ...
- Sky Code(poj3904)
Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2085 Accepted: 665 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 ...
- ACM学习大纲
1 推荐题库 •http://ace.delos.com/usaco/ 美国的OI 题库,如果是刚入门的新手,可以尝试先把它刷通,能够学到几乎全部的基础算法极其优化,全部的题解及标程还有题目翻译可以b ...
- ACM训练大纲
1. 算法总结及推荐题目 1.1 C++ STL • STL容器: set, map, vector, priority_queue, queue, stack, deque, bitset• STL ...
随机推荐
- 字符串转json
function str2json(str) { var arr = str.split('.'), json = {}, _this = json; if (!json[arr[0]]) json[ ...
- LCA最近公共祖先 Tarjan离线算法
学习博客: http://noalgo.info/476.html 讲的很清楚! 对于一颗树,dfs遍历时,先向下遍历,并且用并查集维护当前节点和父节点的集合.这样如果关于当前节点(A)的关联节点( ...
- HNOI2002
对于当天的营业额,你要找到之前的数和他差的绝对值最小的和.由于这个是不断在插入的,所以用伸展树来维护. http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- poj2528 线段树+离散化
由于坐标可能很大,此时需要离散化,将值转化为对应的坐标. #include<stdio.h> #include<algorithm> using namespace std; ...
- 警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:CurrencyClientServe
有的说: 在Servers视图里双击创建的server,然后在其server的配置界面中选中"Publish module contexts to separate XML files&qu ...
- C语言中常用的string.h的字符函数
strcmp 字符串比较函数 原型: int strcmp(char *str1, char *str2); 例子: ) printf("buffer 1 is greater than b ...
- Oracle常用sql
Oracle不像Sqlserver,并没有提供l默认约束,但提供了默认值,效果一样.--------------------------- 在建表时设置默认约束-------------------- ...
- 中间件、MetaQ入门学习
目录 . 中间件技术 . MetaQ中间件 . MetaQ编程实践 1. 中间件技术 0x1: 中间件简介 中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的 ...
- ELF(Executable and Linkable Format)
目录 . 引言 . ELF文件格式 . ELF格式分析工具 0. 引言 0x1: ELF文件类型 ELF文件标准里把系统中采用ELF格式的文件归为以下几类 . 可重定位文件(Relocatable F ...
- UVA10118(记忆化搜索 + 好题)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19440 题意,4堆不同颜色的糖果,每堆N个,从堆上往下拿,放入一个最大装5个 ...