题意:给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(容斥原理)的更多相关文章

  1. HDU 4135 Co-prime(容斥原理)

    Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...

  2. hdu4135 Co-prime 容斥原理

    Given a number N, you are asked to count the number of integers between A and B inclusive which are ...

  3. hdu5072 Coprime (2014鞍山区域赛C题)(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...

  4. hdu 5072 Coprime 容斥原理

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  5. HDU5072 容斥原理

    G - Coprime Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit ...

  6. 2014鞍山现场赛C题HDU5072(素筛+容斥原理)

    Coprime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  7. [容斥原理] hdu 4135 Co-prime

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) ...

  8. HDU 3388 Coprime(容斥原理+二分)

    Coprime Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  9. HDU 5072 Coprime (单色三角形+容斥原理)

    题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  10. HDU4135 Co-prime(容斥原理)

    题目求[A,B]区间内与N互质数的个数. 可以通过求出区间内与N互质数的个数的前缀和,即[1,X],来得出[A,B]. 那么现在问题是求出[1,X]区间内与N互质数的个数,考虑这个问题的逆问题:[1, ...

随机推荐

  1. 选错实施顾问公司 ERP项目九死一生

    今天接到一个朋友的电话,他是一家企业老总.这位老总感到非常头疼的是他的企业选择了一款国际上名气很大的ERP软件,但实施效果却强差人意.他的疑问是"不是说只要选对了ERP产品,谁实施都能成功吗 ...

  2. 在win8中如何实现下拉刷新的功能

      现在我以listview为例来讲述下拉刷新的功能! 在xaml中设置listview一定要设置一个这样的属性,IsSwipeEnabled=false,然后再listview控件的前面要布局下拉刷 ...

  3. [每天一道A+B]签到检测程序

    签到检测程序,解析github提供的api内的json,解决了服务器和本地时间不同步的问题(时差+8H),实现按日期更新当前签到表.下一步是从api获取organization的信息,求出未签到的成员 ...

  4. 【Todo】深入理解Java虚拟机 读书笔记

    有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M ...

  5. A*寻路初探 GameDev.net 转载

    A*寻路初探 GameDev.net 译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念.这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为 ...

  6. xp关不了机

    自己测试:按第2点的设置既可成功1.点“开始→设置→控制面板→电源选项→高级电源管理”,如果你的机器支持高级电源管理功能,则选中“启用高级电源管理支持”:2.单击“开始”,并运行“regedit”,然 ...

  7. ORA-00257错误

    Archiver error,connect internal only,until freed   表示归档日志目录已满,用户不能再连接数据库,现有用户可继续查询数据库,但是不能执行DML语句 插删 ...

  8. java-No exception of type ConfigurationException can be thrown; an exception type must be a subclass of Throwable

    功能:读配置文件 java菜鸟:导入工程在报名处就开始报错,第一次遇到 import org.apache.commons.lang3.StringUtils; import org.apache.c ...

  9. redmine 2.5.2 安装后邮件无法发送

    找到redmine安装目录-apps->redmine->htdocs->conflg->configuration.yml email_delivery:    delive ...

  10. WPF:百度百科

    WPF http://baike.baidu.com/view/292311.htm