hdu5072-Coprime(容斥原理)
题意:给N个互不相同的数,选择出两两互质或者两两不互质的三个数,有多少种选法。
题解:一共有C(N,3)中选择方式,减去不符合要求的,剩下的就是答案。
详见 http://blog.csdn.net/csuhoward/article/details/44978087
看到有的题解说是同色三角形,感觉和CCPC长春那个六个人三个人必有互相认识或者互相不认识好像= =
开始求出了所有质数的组合,然后一直T,后来看题解发现只要对现有的数做预处理就可以=。=
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath> using namespace std;
typedef long long ll; const int N = ;
int a[N], n;
int fac[N][], sz[N];
int ret[N];
int vis[N]; int prime[N], p;
bool is_prime[N]; int sieve()
{
for (int i = ; i < N; ++i) is_prime[i] = true;
is_prime[] = is_prime[] = false;
for (int i = ; i < N; ++i) {
if (is_prime[i]) {
prime[p++] = i;
for (int j = * i; j <= n; j += i)
is_prime[j] = false;
}
}
return p;
} void init() {
int cnt, x, limit;
for (int i = ; i <= ; ++i) {
x = i, limit = sqrt(x), cnt = ;
for (int k = ; prime[k] <= limit; ++k) {
if (x % prime[k] == ) fac[i][cnt++] = prime[k];
while (x % prime[k] == ) x /= prime[k];
}
if (x > ) fac[i][cnt++] = x;
sz[i] = cnt;
}
} ll solve() {
memset(ret, , sizeof ret);
for (int i = ; i < N; ++i) {
for (int j = i; j < N; j += i) {
if (vis[j]) ret[i]++;
}
} ll ans = ;
for (int i = ; i < n; ++i) {
int cnt = sz[a[i]];
int st = <<cnt;
ll tmp = ;
for (int k = ; k < st; ++k) {
int val = ;
int w = ;
for (int j = ; j < cnt; ++j) {
if (k & (<<j)) {
val *= fac[a[i]][j];
w ^= ;
}
}
if (w) tmp += ret[val]-;
else tmp -= ret[val]-;
}
ans += tmp * (n-tmp-);
}
return ans;
} int main()
{
int T;
scanf("%d", &T);
sieve();
init();
while (T--) {
scanf("%d", &n);
memset(vis, , sizeof vis); // everyone has unique id
for (int i = ; i < n; ++i) scanf("%d", &a[i]), vis[a[i]] = ;
ll ans = solve();
ll tot = (ll)n * (n-) * (n-) / ;
printf("%lld\n", tot - ans/);
}
return ;
}
hdu5072-Coprime(容斥原理)的更多相关文章
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- hdu4135 Co-prime 容斥原理
Given a number N, you are asked to count the number of integers between A and B inclusive which are ...
- hdu5072 Coprime (2014鞍山区域赛C题)(数论)
http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...
- hdu 5072 Coprime 容斥原理
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- HDU5072 容斥原理
G - Coprime Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit ...
- 2014鞍山现场赛C题HDU5072(素筛+容斥原理)
Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- [容斥原理] hdu 4135 Co-prime
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 3388 Coprime(容斥原理+二分)
Coprime Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDU 5072 Coprime (单色三角形+容斥原理)
题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- HDU4135 Co-prime(容斥原理)
题目求[A,B]区间内与N互质数的个数. 可以通过求出区间内与N互质数的个数的前缀和,即[1,X],来得出[A,B]. 那么现在问题是求出[1,X]区间内与N互质数的个数,考虑这个问题的逆问题:[1, ...
随机推荐
- umount移动硬盘遇到device is busy问题
#umount /mnt/fourtumount: /mnt/fourt: device is busy. (In some cases useful info about proce ...
- Qt之等待提示框(QTimer)
简述 上节讲述了关于QPropertyAnimation实现等待提示框的显示,本节我们使用另外一种方案来实现-使用定时器QTimer,通过设置超时时间定时更新图标达到旋转效果. 简述 效果 资源 源码 ...
- Mobile Assistant
闲来无事,分享一个小东西--手机小助手,历时两周,这里选择几个不错的界面以示效果! 如果有感兴趣的部分,欢迎随时交流!
- UVa 11039 (排序+贪心) Building designing
白书上的例题比较难,认真理解样例代码有助于提高自己 后面的练习题相对简单,独立思考解决问题,增强信心 题意:n个绝对值各不相同的非0整数,选出尽量多的数排成序列,使得该序列正负交错且绝对值递增. 解法 ...
- hdu4605 magic ball game 树状数组+离线处理
题意:给你一棵二叉树,每个节点有一个w值,现在有一颗小球,值为x,从根节点往下掉,如果w==x,那么它就会停止:如果w>x,那么它往左.右儿子的概率都是1.2:如果w<x,那么它往左儿子的 ...
- hdu4618 Palindrome Sub-Array dp+记忆化搜索 或者直接暴力
题意就是找一个 左右上下对称的正方形矩阵. 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4618 没想到记忆+dp和暴力就能水过... //记忆话搜索+d ...
- DelegatingFilterProxy
安全过滤器链 Spring Security的web架构是完全基于标准的servlet过滤器的. 它没有在内部使用servlet或任何其他基于servlet的框架(比如spring mvc), 所以它 ...
- (转)gLFlush()和gLFinish()
笔者初使用OpenGL之时,所遇到的命令不能生效的问题:比如开始想用gLClearColor来设置背景色为红色,结果执行后背景还是默认的黑色.后来查阅资料,才知道这与OpenGL的指令执行流程有关,要 ...
- ecshop 用户名和邮箱都能登陆
1.打开/includes/modules/integrates/integrate.php文件,并找到下面代码 if ($this->check_user($username, $passwo ...
- JBPM4入门——8.等待节点的分支执行
JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件 JBPM4入门——3.JBPM4开发环境的搭建 JBPM4入门—— ...