这题说的是给了 n 个数字 每个数值大于1 小于100000,n小于100000 ,找出满足下面要求的三人组有多少种 比如abc ( (ab)==(bc)==(ac) ==1 )||( (ab)!=1&&(bc)!=1&&(ac)!=1 )

(()----表示gcd )计算出这样的三元组的个数。

这样考虑 三元组必须满足上面的要求 , 那么我们减去不满足的可能情况 abc 计算与 a互质的个数 和与a不互质的个数 得到了b在内的不可行的方案数,然后这样发现会多算一次 如果abc

(ab)==1 (ac)!=1 在计算c的时候又会计算一次。 然后我们得到了所有的 不肯能方案除以2 得到了不可能的方案数  总方案数减去不可能方案数就得到了(因为数比较小用容斥便可以计算出答案)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include<string.h>
#include <vector>
using namespace std;
typedef pair<int,int> PF;
bool vis[];
int prime[],num;
void pri_p(){
num=;
memset(vis,false,sizeof(vis));
for(long long i=; i<=; ++i)
if(vis[i]==false){
prime[num++]=i;
for(long long j=i*i; j<=; j+=i) vis[j]=true;
}
}
int A[];
int P[];
int sizea[];
int D[];
vector<PF>F[];
void fenjie(int loc,int len){
for(int s=; s<(<<len); ++s){
int ss=,num=;
for(int i=;i<len ;++i){
if(s&(<<i)){
ss*=P[i]; num++;
}
}
F[loc].push_back(make_pair(ss,num));
}
sizea[loc]=F[loc].size();
}
void inti(){
pri_p();
for(int i=; i<=; ++i){
int len=;
int s=i,num=;
while(s>&&prime[num]!=){
if(s%prime[num]==){
P[len++]=prime[num];
while(s>&&s%prime[num]==){
s/=prime[num];
}
}
num++;
}
fenjie(i,len);
}
}
void sum(int loc){
int sz=sizea[loc];
for(int i=; i<sz; ++i){
PF t=F[loc][i];
D[t.first]++;
}
}
int jud(int loc){
int ans=;
for(int i=; i<sizea[loc]; ++i){
PF f=F[loc][i];
if(f.second%==)ans+=D[f.first];
else ans-=D[f.first];
}
return ans;
}
int main()
{
inti();
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; ++cc){
long long n;
scanf("%I64d",&n);
memset(D,,sizeof(D));
for(int i=; i<n; ++i){
scanf("%d",&A[i]);
sum(A[i]);
}
long long ans=;
for(int i=; i<n; ++i){
long long S= jud(A[i]);
long long noeven = n-S;
if(S<=||noeven==) continue;
ans = ans+noeven*(S-);
}
printf("%I64d\n",n*(n-)*(n-)/-ans/);
}
return ;
}

hdu5072 容斥+枚举的更多相关文章

  1. HDU - 1695 GCD (容斥+枚举)

    题意:求区间1<=i<=b与区间1<=j<=d之间满足gcd(i,j) = k 的数对 (i,j) 个数.(i,j)与(j,i) 算一个. 分析:gcd(i,j)=k可以转化为 ...

  2. LOJ #2541. 「PKUWC 2018」猎人杀(容斥 , 期望dp , NTT优化)

    题意 LOJ #2541. 「PKUWC 2018」猎人杀 题解 一道及其巧妙的题 , 参考了一下这位大佬的博客 ... 令 \(\displaystyle A = \sum_{i=1}^{n} w_ ...

  3. Luogu P2595 [ZJOI2009]多米诺骨牌 容斥,枚举,插头dp,轮廓线dp

    真的是个好(毒)题(瘤).其中枚举的思想尤其值得借鉴. \(40pts\):插头\(dp\),记录插头的同时记录每一列的连接状况,复杂度\(O(N*M*2^{n + m} )\). \(100pts\ ...

  4. 1307E - Cow and Treats 二分 枚举边界 容斥

    1307E - Cow and Treats 题意 有一排给定口味的草,并且给m头牛,每个牛都只吃一种口味的草,并且要吃给定数量个.现在可以安排牛从两边出发,方向向另一方向进发,每次路过符合他口味的草 ...

  5. hdu5072(鞍山regional problem C):容斥,同色三角形模型

    现场过的第四多的题..当时没什么想法,回来学了下容斥,又听学长讲了一讲,终于把它过了 题目大意:给定n个数,求全部互质或者全部不互质的三元组的个数 先说一下同色三角形模型 n个点 每两个点连一条边(可 ...

  6. BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】

    BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...

  7. POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)

      题意:规定每次跳的单位 a1, a2, a3 …… , an, M,次数可以为b1, b2, b3 …… bn, bn + 1, 正好表示往左,负号表示往右, 求能否调到左边一位,即 a1* b1 ...

  8. 【BZOJ-4455】小星星 容斥 + 树形DP

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 137[Submit][Status] ...

  9. XTU 1242 Yada Number 容斥

    Yada Number Problem Description: Every positive integer can be expressed by multiplication of prime ...

随机推荐

  1. Unity读取 JSon配置文件

    一.记录 只是记录,现在在项目中删除掉了.先保留下来,以飨来着!!当然有包括自己. 二.读取配置的代码 简单粗暴 [ExecuteInEditMode] public class Config : M ...

  2. Django里面是文件静态化的方法

    看Django官网的时候,由于自己的英语基础较差,而实现的谷歌翻译比较烂,只能看懂个大概.在文件静态化的时候,讲的比较繁琐一点,没怎么看懂,遂询问了一下其他人,明白了许多,但是细节需要注意的地方特别多 ...

  3. 教你一招解决浏览器兼容问题(PostCSS的使用)

    我们在处理网页的时候,往往会遇到兼容性的问题.在这个问题上分为两个大的方向:屏幕自适应&浏览器兼容.而屏幕自使用的方法有许多,包括框架之类的,但是浏览器的兼容却没有一个号的框架.在我们日常处理 ...

  4. PostgreSQL数据库smallint、bigint转到Oracle,要用什么类型替代? 是number么,那长度分别是多少?

    个人意见,仅供参考:smallint是有符号或无符号2字节的整数,范围是0-65,536,5位整数bigint是有符号或无符号8字节的整数,范围是0-18,446,744,073,709,551,61 ...

  5. 本地schemeApp扩展

    作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di 本地schemeApp扩展 iHasApp这个用过的话,大概知道我说的是什么了. scheme ...

  6. 基于TINY4412的Andorid开发-------简单的LED灯控制

    参考资料: <Andriod系统源代码情景分析> <嵌入式Linux系统开发完全手册_基于4412_上册> 作者:彭东林 邮箱:pengdonglin137@163.com 平 ...

  7. android异常:Can not perform this action after onSaveInstanc

    extends:http://zhiweiofli.iteye.com/blog/1539467 本人某个android项目开发阶段一直运行良好,直到上线前夕,在某款跑着android 4.03系统的 ...

  8. linux的~和/的区别

    转自:https://zhidao.baidu.com/question/166486946.html /是目录层的分隔.表示符.只有一个/表明是root,/etc/表明是根目录下面的etc目录(当然 ...

  9. spring boot application.properties基本配置

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://loca ...

  10. HDCMS留言插件的使用!

    HDCMS留言插件,JS简单示例: <img src='{|U:'code'}' onclick='this.src='{|U:'code'}&'+Math.random()' /> ...