Problem 5 素数筛法+并查集
$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 = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} #define Rep(i, a, b) for(int i = a; i <= b; i ++)
#define LL long long const int N = 1e5 + , To = 1e6; bool Check[To + ];
int tot, prime[To]; int fa[To + ];
int n;
int A[N];
bool Use[To]; void Get() {
Rep(i, , To) {
if(!Check[i]) prime[++ tot] = i;
Rep(j, , tot) {
if(prime[j] * i > To) break;
Check[i * prime[j]] = ;
if(i % prime[j] == ) break;
}
}
} int Get(int x) {
return fa[x] == x ? x : fa[x] = Get(fa[x]);
} const int Mod = 1e9 + ; LL Ksm(LL a, LL b) {
LL ret = ;
while(b) {
if(b & ) ret = ret * a % Mod;
a = a * a % Mod;
b >>= ;
}
return ret;
} int vis[To]; int main() {
Get();
for(int T = read(); T; T --) {
n = read();
int js = ;
memset(Use, , sizeof Use);
int Max = ;
Rep(i, , n) A[i] = read(), Use[A[i]] = , Max = max(Max, A[i]), js += (A[i] == );
Rep(i, , To) fa[i] = i;
Rep(i, , tot) {
if(prime[i] > Max) break;
for(int j = ; 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 = ;
Rep(i, , n) {
int f = Get(A[i]);
if(vis[f] != T) vis[f] = T, up ++;
}
if(js > ) up += (js - );
LL ans = Ksm(, up);
ans -= ;
if(ans < ) ans += Mod;
cout << ans << "\n";
} return ;
}
Problem 5 素数筛法+并查集的更多相关文章
- Codeforces 731C Socks 并查集
题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...
- poj 1182 食物链 (并查集)
http://poj.org/problem?id=1182 关于并查集 很好的一道题,开始也看了一直没懂.这次是因为<挑战程序设计竞赛>书上有讲解看了几遍终于懂了.是一种很好的思路,跟网 ...
- poj1182 并查集
题目连接:http://poj.org/problem?id=1182 基础并查集,需要维护与根节点关系,解析见代码: /* poj 1182 并查集 思路分析:让你分析这些话里面多少假的 只需要用 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- D. Mahmoud and a Dictionary 种类并查集
http://codeforces.com/contest/766/problem/D 所谓种类并查集,题型一般如下:给定一些基本信息给你,然后又给出一些信息,要求你判断是真是假.例如给出a和b支持不 ...
- C. Hongcow Builds A Nation 并查集
http://codeforces.com/contest/745/problem/C 把他们并查集后, 其他没有连去government的点,全部放去同一个并查集,然后选择一个节点数最多的gover ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集
Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun ...
- HDU 6326.Problem H. Monster Hunter-贪心(优先队列)+流水线排序+路径压缩、节点合并(并查集) (2018 Multi-University Training Contest 3 1008)
6326.Problem H. Monster Hunter 题意就是打怪兽,给定一棵 n 个点的树,除 1 外每个点有一只怪兽,打败它需要先消耗 ai点 HP,再恢复 bi点 HP.求从 1 号点出 ...
- CodeForces - 688C:NP-Hard Problem (二分图&带权并查集)
Recently, Pari and Arya did some research about NP-Hard problems and they found the minimum vertex c ...
随机推荐
- Xshell连接虚拟机文档教程
1打开VirtualBox 2 找到导入的虚拟机 3右键虚拟机 启动 4 等待加载 5 加载的时候,打开xshell 6 7 填写框住的内容 名称: 自己取 主机: 127.0.0.1 固定内容 端 ...
- Python爬虫快速上手教程
1 这个是什么 整理Python中requests常用的API 2 代码 from bs4 import BeautifulSoup import requests import re ...
- java之hibernate之关联映射之多对一单向关联
1.在之前学习了单表的crud操作.在实际应用中,大都是多表关联操作,这篇会学习如何处理多表之间的关系. 2.考察书籍表和书籍分类表的关系.书籍表和书籍分类表之间是多对一的关系.数据库的表设计为: 3 ...
- centos7.5 离线安装ntp服务
安装 #检查rpm包 rpm -qa | grep ntp #从https://pkgs.org/download/ntp 下载rpm包 ntp-4.2.6p5-28.el7.centos.x86_6 ...
- Cookie中的HttpOnly
1.什么是HttpOnly? 如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索 2.ja ...
- python3-使用requests模拟登录网易云音乐
# -*- coding: utf-8 -*- from Crypto.Cipher import AES import base64 import random import codecs impo ...
- vue应用难点总结
一.父子组件生命周期 父组件create->子组件create->子组件mounted->父组件mounted 当一个钩子函数使用了异步请求时,并不会等该钩子函数中所有异步的回调都执 ...
- jQuery.each的function中有哪些参数
1.没有参数 $("img").each(function(){ $(this).toggleClass("example"); }); 2.有一个参数,这个参 ...
- JAVA - Windows下JDK默认安装的配置参数
JDK版本1.8 JAVA_HOME C:\Program Files\Java\jdk1.8.0_60 CLASSPATH .;%%JAVA_HOME%%\lib;%%JAVA_HOME%%\lib ...
- Vue项目中使用svg图标
svg的图片有着颜色自定义大小自定义的优势.在阿里图标库可以下载svg图片. 那么在vue框架中我们该怎么使用svg图片呢 这个时候就用到了 webpack 插件 svg-sprite-loader ...