$des$

给定一个长度为 $n$ 的正整数序列 ${a_i }$。
将 ${1,2,...,n}$ 划分成两个非空集合 $S、T$,使得 $gcd(\prod_{i \in S} a_i,
\prod_{i \in T} a_i) = 1$
求划分方案数,对 $10^9 + 7$ 取模。

$sol$

对于两个数 $a, b$ 必须处于同一个集合,当其含有相同因子。
这样的话,将含有相同因子的数用并查集维护。
最后统计所有的 $n$ 个数被分成了 $x$ 个集合
答案就是 $2 ^ n - 2$,$1$ 需要特判

#include <bits/stdc++.h>using namespace std;#define gc getchar()
inline int read() {int x = 0; char c = gc;while(c < '0' || c > '9') c = gc;while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = gc;return x;
}#define Rep(i, a, b) for(int i = a; i <= b; i ++)
#define LL long longconst int N = 1e5 + 10, To = 1e6;bool Check[To + 10];
int tot, prime[To];int fa[To + 10];
int n;
int A[N];
bool Use[To];void Get() {Rep(i, 2, To) {if(!Check[i]) prime[++ tot] = i;Rep(j, 1, tot) {if(prime[j] * i > To) break;Check[i * prime[j]] = 1;if(i % prime[j] == 0) break;}}
}int Get(int x) {return fa[x] == x ? x : fa[x] = Get(fa[x]);
}const int Mod = 1e9 + 7;LL Ksm(LL a, LL b) {LL ret = 1;while(b) {if(b & 1) ret = ret * a % Mod;a = a * a % Mod;b >>= 1;}return ret;
}int vis[To];int main() {Get();for(int T = read(); T; T --) {n = read();int js = 0;memset(Use, 0, sizeof Use);int Max = 0;Rep(i, 1, n) A[i] = read(), Use[A[i]] = 1, Max = max(Max, A[i]), js += (A[i] == 1);Rep(i, 1, To) fa[i] = i;Rep(i, 1, tot) {if(prime[i] > Max) break;for(int j = 1; j * prime[i] <= Max; j ++) {int num = j * prime[i];if(Use[num]) {int fa1 = Get(num), fa2 = Get(prime[i]);if(fa1 != fa2) fa[fa1] = fa2;}}}LL up = 0;Rep(i, 1, n) {int f = Get(A[i]);if(vis[f] != T) vis[f] = T, up ++;}if(js > 1) up += (js - 1);LL ans = Ksm(2, up);ans -= 2;if(ans < 0) ans += Mod;cout << ans << "\n";}return 0;
}

转载于:https://www.cnblogs.com/shandongs1/p/9770424.html

Problem 5 素数筛法+并查集相关推荐

  1. leetcode 952. 按公因数计算最大组件大小 (素数筛法+并查集)

    题意: 给一串数,每一个数代表图的一个节点,然后两个数之间有除1之外的公因数表示这两个节点之间有边相连,求最大连通图. 做法: 如果平方找数两两之间是否存在公因数肯定超时,如果要判断两个数是否有公因数 ...

  2. Codeforces Contest 1081 problem D Maximum Distance —— 并查集

    Chouti was tired of the tedious homework, so he opened up an old programming problem he created year ...

  3. CodeForces - 1217F Forced Online Queries Problem(线段树分治+并查集撤销)

    题目链接:点击查看 题目大意:给出 nnn 个点,初始时互相不存在连边,需要执行 mmm 次操作,每次操作分为两种类型: 1xy1 \ x \ y1 x y:如果 (x,y)(x,y)(x,y) 之间 ...

  4. 方块游戏 (银河英雄传说)(并查集)

    方块游戏 (cubes.pas/c/cpp) [题目描述] 小A和小B在玩一个方块游戏.编号为1到n(1<=n<=30000)的n个方块正放在地上.每个构成一个立方柱. 游戏开始后,小A会 ...

  5. D. The Door Problem 带权并查集

    http://codeforces.com/contest/776/problem/D 注意到每扇门都有两个东西和它连接着,那么,如果第i扇门的状态是1,也就是已经打开了,那么连接它的两个按钮的状态应 ...

  6. 【bzoj 入门OJ】[NOIP 热身赛]Problem C: 星球联盟(并查集)

    Problem C: 星球联盟 Time Limit: 4 Sec  Memory Limit: 256 MB Submit: 57  Solved: 15 [Submit][Status][Web ...

  7. gym:Problem A Artwork(并查集思维题)

    20162017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016 Problem A Artwork 题目链接 http://codef ...

  8. 线段树分治 ---- CF1217F - Forced Online Queries Problem(假离线 可撤销并查集 + 线段树分治)详解

    题目链接 题目大意 解题思路: 我一开始想到可以用可撤销并查集去维护这种删边加边的操作,但是有个缺点是每次撤销都有把后面的边全部撤销复度是O(n2)O(n^2)O(n2) 首先我们考虑这种动态加边删边 ...

  9. P1865 A % B Problem (素数筛法,前缀和)

    题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...

最新文章

  1. LabVIEW设计自定义滚动条
  2. jscience中的parse转换
  3. [USACO15JAN]草鉴定Grass Cownoisseur
  4. ASP.NET之一般处理程序笔记
  5. python if后面要不要加括号_Python装饰器兼容加括号与不加括号的写法
  6. javasript 操作option select
  7. 真正聪明的人从来不自己做PPT,看完这篇就放假吧!
  8. android-hotfix(QQ空间思路)浅析
  9. jsp基础代码片段(含sql与js和jsp的交互)与简易贴吧网站项目
  10. 2019电子科大计算机基础知识,电子科技大学820真题1999-2019终极版.pdf
  11. Python typing —— 类型提示(type hint)
  12. centos6.5 搭建时间服务器
  13. 两台服务器centos7.x 直接文件共享,文件挂载 nfs
  14. pyglet: a cross-platform windowing and multimedia
  15. sql:mysql:分析为什么like模糊查询效率低
  16. QQ空间认证之数据篇
  17. 学信认证使用Jetbrains教育授权方式
  18. 传智博客 JavaWeb方面的所有知识 听课记录 经典
  19. 企业的云服务选择:SaaS、PaaS、IaaS对比分析
  20. android流光字体实现,CSS3自定义动画实现流光文字特效

热门文章

  1. 使用tomcat软件在本地搭建服务器
  2. 科学计算机撤销,云计算环境下基于属性的撤销方案-计算机科学.PDF
  3. c# 指定打开某个路径下的CMD_(win10下sublime通过配置JSON调用MATLAB直接运行程序)(转载)...
  4. java excel读取操作,Java读取Excel并操作
  5. c语言的适当大小的子集,编译原理上机实验报告
  6. java bufferarray_如何使用Java的ByteBuffer.arrayOffset()方法
  7. 网络营销外包浅析网络营销外包中网站排名效果不佳的原因有哪些?
  8. 网络营销外包——网络营销外包专员是如何提升网站权重数值的?
  9. mockito mock void方法_一文让你快速上手 Mockito 单元测试框架(上)
  10. oracle 日期改字符格式_oracle怎么把数值型日期转换成日期字符型