这题说的是给了 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. ionic简单路由及页面传参

    1)页面跳转及传参方法 angular.module('app.routes', [])//routes路由模型 .config(function($stateProvider, $urlRouter ...

  2. rpm源码安装mysql

    1)访问官网(mysql社区服务器) http://downloads.mysql.com/archives/community/ 2)选择自己需要的版本和对应服务器(例如 服务器是centos 6. ...

  3. 单独使用 EHCache

    1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中.如项目已安装了 ...

  4. 《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

    10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &c ...

  5. Java创建数组的三种方法

    ■ 第一种: int[] arr=new int[6]; arr[0] = 1; arr[1] = 2 arr[2] = 3; arr[3] = 4; arr[4] = 5; arr[5] = 6; ...

  6. windbg载入目标模块pdb

    .reload /f xxxx.dll ld xxxx 以kdcom为例子 .reload /f kdcom.dll ld kdcom 二选一

  7. const T* 和 T* const

    使用c++的时候,经常会在 const int *p 和 int * const p这个地方迷惑.这里记录一下: const int *p  = int const *p //这里const后面的为* ...

  8. JavaIO详解

    很全面的内容:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html

  9. 12.文件系统fs

    文件系统fs ==> 提供文件的读取, 写入, 更名, 删除, 遍历目录, 链接等POSIX文件系统操作 1.fs.readFile(filename, [encoding], [callbac ...

  10. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...