题意:

给出n个数字,选出若干个数字,使得这些数字的乘积是一个完全平方数,问有多少种选法。

解法:

考虑异或方程组,$x_i$表示第i个数字是否选,

注意到只要保证结果中各个质因数都出现偶数次就可保证结果是一个完全平方数。

相当于每个因数出现的次数$mod \  2 = 0$。

这样对于每一个质因子,我们可以得到一个有n个变量的异或方程。

求矩阵中自由元的个数$cnt$,答案就是$2^{cnt}-1$

注意本题中变量数可能远大于方程数,我们不能普通地Jordan。

只要消成阶梯矩阵,并求出矩阵的秩即可。

用$bitmask$压位,可以做到$O(\frac{n^3}{64})$

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <bitset> #define N 2010
#define LL long long
#define P 1000000007LL using namespace std; bitset<N> g[N];
bool v[N];
int tot,prime[N];
LL a[N]; LL solve(int n,int m)
{
LL ans=1LL;
int k=;
for(int i=;i<=m;i++)
{
int t=;
for(int j=k;j<=n;j++)
if(g[j][i])
{
t=j;
break;
}
if(!t)
{
ans=ans*2LL%P;
continue;
}
swap(g[t],g[k]);
for(int j=k+;j<=n;j++)
if(j!=k && g[j][i])
g[j]^=g[k];
k++;
}
return (ans-1LL+P)%P;
} int main()
{
for(int i=;i<=;i++)
{
if(v[i]) continue;
prime[++tot]=i;
for(int j=i+i;j<=;j+=i)
v[j]=;
}
int T,n,Te=;
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=tot;i++) g[i].reset();
for(int i=;i<=n;i++)
{
cin>>a[i];
for(int j=;j<=tot;j++)
{
LL tmp=a[i];
while(tmp%prime[j]==)
{
g[j][i]=g[j][i]^;
tmp/=prime[j];
}
}
}
printf("Case #%d:\n",++Te);
cout << solve(tot,n) << endl;
}
return ;
}

Subsets Forming Perfect Squares的更多相关文章

  1. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

  2. [LintCode] Perfect Squares 完全平方数

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  3. LeetCode Perfect Squares

    原题链接在这里:https://leetcode.com/problems/perfect-squares/ 题目: Given a positive integer n, find the leas ...

  4. Perfect Squares

    Perfect Squares Total Accepted: 18854 Total Submissions: 63048 Difficulty: Medium Given a positive i ...

  5. CF914A Perfect Squares

    CF914A Perfect Squares 题意翻译 给定一组有n个整数的数组a1,a2,…,an.找出这组数中的最大非完全平方数. 完全平方数是指有这样的一个数x,存在整数y,使得x=y^2y2  ...

  6. [LeetCode] 0279. Perfect Squares 完全平方数

    题目 Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9 ...

  7. LeetCode 279. 完全平方数(Perfect Squares) 7

    279. 完全平方数 279. Perfect Squares 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数 ...

  8. Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)

    Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  9. 花式求解 LeetCode 279题-Perfect Squares

    原文地址 https://www.jianshu.com/p/2925f4d7511b 迫于就业的压力,不得不先放下 iOS 开发的学习,开始走上漫漫刷题路. 今天我想聊聊 LeetCode 上的第2 ...

随机推荐

  1. nodejs如何使用mongo数据库

    nodejs如何使用mongo数据库 首先,请参考下面两个链接,配置并运行express和mongodb. 1.使用express生成一个空白网站http://cnodejs.org/topic/50 ...

  2. Hnu 11187 Emoticons :-) (ac自己主动机+贪心)

    题目大意: 破坏文本串.使之没有没有出现表情.破坏就是用空格替换.问最少须要破坏多少个字符. 思路分析: 初看跟Hdu 2457 没什么差别,事实上Hdu2457是要求将字符替换成ACGT,而这个仅仅 ...

  3. vim 自动补全

    1. vim编辑器自带关键字补全 触发: ctrl + n  or ctrl + p 补全命令: <C-n>              普通关键字 [能够根据buffer以及标签文件列表等 ...

  4. Tomcat服务器改主页 & jeesite框架改首页

    Tomcat服务器改主页: 方法一: 把原来的 ROOT 目录清空: 发布你自己的项目到 ROOT 目录下: 发布程序 /webapps/ROOT/WEB-INF/web.xml 中需要有默认首页定义 ...

  5. CentOS minimal 安装ssh 服务 和客户端

      检查是否装了SSH包 如果现实有openssh-server 说明系统已经安装了ssh 2 如果系统没有安装ssh 那么可以在线安装 yum install openssh-server 3 设置 ...

  6. MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)

    搭建SpringMVC的-->传送门<-- 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话,pom.xml的配置如下: <?xml version=" ...

  7. UniversalImageLoader 学习

    http://www.tuicool.com/articles/zIRNN3z http://www.cnblogs.com/avenwu/archive/2013/05/03/3058468.htm ...

  8. [IT新应用]如何拯救死机的苹果手机(iPhone X)

    突然白天接了一个电话,苹果就死机了.这是用这个手机半年来第一次.貌似还能接电话,就是屏幕上一个白色的圆圈,一直转啊转. 后来百度了一下,找到这一篇.将重点部分摘录如下: http://www.sohu ...

  9. ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别

    一.说明 本文章主要是讲解asp.net mvc中ViewBag.ViewData和TempData的使用和区别,ViewBag.ViewData和TempData常常用于将action方法中的数据传 ...

  10. java CyclicBarrier和wait/notifyAll

    1 CyclicBarrier 多个进程做自己的事情,然后先做完的就等待在CyclicBarrier上,然后最后一个做完的线程到来时会冲破CyclicBarrier,然后执行CyclicBarrier ...