题目链接:http://vjudge.net/contest/142484#problem/A

这个题目也是2016年CCPC网赛上面的题目,当时我是不会做的,但是大牛们都知道这是一个原题,最后给一队过了,还是大牛们厉害,其实也不是很难。

题意:

给出n个正整数,从中选出1个或者多个,使得选出来的整数乘积是完全平方数,一共有多少种选法。

分析:

"不含大于500的素数因子"——每一个数的唯一分解式。

例如: {4,6,10,15}

4x1 = 22 * 3* 50;

6x2 = 21 * 31 * 50;

10x3= 21 * 30 * 51;

15x4 = 20* 31 * 51;

要使得乘积为平方数,那么每个分向量的指数为偶数。

就得到了方程组:

x2 + x3 = 0(mod2);

x2 + x4 = 0(mod2);

x3 + x4 = 0(mod2);

解方程:

发现有x个自由变量答案就是 2x - 1个解(全部不要题意删除);

#include <bits/stdc++.h>
using namespace std; const int maxn = + ;
const int maxp = ; int vis[maxn];
int prime[maxp]; int gen_primes(int n)
{
int m = (int)sqrt(n+0.5);
memset(vis,,sizeof(vis)); //是素数为 0
for(int i=; i<=m; i++)
{
if(!vis[i])
{
for(int j=i*i; j<=n; j+=i)
vis[j] = ;
}
} int c = ;
for(int i=; i<=n; i++)
{
if(!vis[i])
prime[c++] = i;
}
return c;
} typedef int Matrix[maxn][maxn]; Matrix A; //m 个 方程组,n 个变元
int ranks(Matrix A,int m,int n)
{
int i=,j=,k,r,u;
while(i<m&&j<n)
{
r = i;
for(k=i; k<m; k++)
if(A[k][j])
{
r = k;
break;
} if(A[r][j])
{
if(r!=i)
for(k=; k<=n; k++)
{
swap(A[r][k],A[i][k]);
} //消元
for(u=i+; u<m; u++)
{
if(A[u][j])
for(k=i; k<=n; k++)
A[u][k] ^=A[i][k];
}
i++;
}
j++;
}
return i;
} int main()
{
int m = gen_primes();
int t;
scanf("%d",&t);
while(t--)
{
int n,maxp = ;
long long x;
scanf("%d",&n);
memset(A,,sizeof(A)); for(int i=; i<n; i++)
{
scanf("%lld",&x);
for(int j=; j<m; j++) //对于某一个素数因子
{
while(x%prime[j]==)
{
maxp = max(maxp,j); //方程组
x = x/prime[j];
A[j][i]^=;
}
}
}
int r = ranks(A,maxp+,n);
printf("%lld\n",(1LL<<(n-r))-);
}
return ;
}

Uva 11542 乘积是平方数的更多相关文章

  1. xor方程组消元 UVA 11542 Square

    题目传送门 题意:给n个数,选择一些数字乘积为平方数的选择方案数.训练指南题目. 分析:每一个数字分解质因数.比如4, 6, 10, 15,, , , , 令,表示选择第i个数字,那么,如果p是平方数 ...

  2. Uva 12009 平方数尾数与自身同样 dfs 构造

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq574857122/article/details/25166611 题目链接:点击打开链接 题意 ...

  3. UVA 11542 - Square(高斯消元)

    UVA 11542 - Square 题目链接 题意:给定一些数字.保证这些数字质因子不会超过500,求这些数字中选出几个,乘积为全然平方数,问有几种选法 思路:对每一个数字分解成质因子后.发现假设要 ...

  4. BZOJ 2440 中山市选2011 全然平方数 二分答案+容斥原理+莫比乌斯反演

    题目大意:求第k个无平方因子数是多少(无视原题干.1也是全然平方数那岂不是一个数也送不出去了? 无平方因子数(square-free number),即质因数分解之后全部质因数的次数都为1的数 首先二 ...

  5. 人活着系列之平方数 分类: sdutOJ 2015-06-22 17:10 7人阅读 评论(0) 收藏

    人活着系列之平方数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 偶然和必然?命运与意志?生与死?理性与情感?价值与非价值?在&quo ...

  6. 洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares

    P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有 ...

  7. Project Euler 92:Square digit chains 平方数字链

    题目 Square digit chains A number chain is created by continuously adding the square of the digits in ...

  8. Project Euler 98:Anagramic squares 重排平方数

    Anagramic squares By replacing each of the letters in the word CARE with 1, 2, 9, and 6 respectively ...

  9. BZOJ2440(全然平方数)二分+莫比乌斯容斥

    题意:全然平方数是指含有平方数因子的数.求第ki个非全然平方数. 解法:比較明显的二分,getsum(int middle)求1-middle有多少个非全然平方数,然后二分.求1-middle的非全然 ...

随机推荐

  1. android之消息机制(二)

    消息通道:Looper 首先编写main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk ...

  2. MyISAM表加字段的特殊方法

    最近一个统计系统的大表需要加字段,表的引擎是myisam,表大小在3亿,物理文件在106G.想想都蛋疼.那么这种情况下怎么把字段撸上去呢? 1. 首先想到了<高性能MySQL>提到的直接更 ...

  3. java中的反射

    1.何为java反射机制: 在运行过程中,对于任意一个类都能够知道这个类的属性和方法:对于任意一个对象都能调用其属性和方法:这种动态获取信息和动态调用方法 就称为java反射 2.获取Class对象的 ...

  4. BizTalk动手实验(六)Orchestration开发

    1 课程简介 通过本课程熟悉Orchestration的相关开发与测试技术 2 准备工作 熟悉XML.XML Schema.XSLT等相关XML开发技术 熟悉.NET相关开发技术 新建BizTalk空 ...

  5. windows7系统下一些常用工具的总结

    1.查看计算机的基本信息:计算机--右键--属性(快捷键:Win+Pause) 2.查看计算机的详细信息:开始菜单--所有程序--附件--系统工具--系统信息(运行命令:msinfo32) 3.定制计 ...

  6. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  7. schtasks在win7下提示错误:无法加载列资源

    转自: http://blog.chinaunix.net/uid-24946452-id-2887851.html 查看cmd 编码 chcp 如使用 936中文GBK编码的话 schtasks.e ...

  8. Sql Server批量删除指定表

    --批量删除以test的表开头的表 declare @name varchar(50) while(exists(select * from sysobjects where name like te ...

  9. mac上卸载oracle jdk 1.8.0_31

    mac上卸载oracle jdk 1.8.0_31版本,因为版本太高了.得安装旧版本才行.卸载的顺序是:进入finder,然后点应用程序,按command+向上箭头键,分别进入根目录的系统与资源库找到 ...

  10. Android 自定义spinner下拉框实现的实现

    请支持原创:http://blog.csdn.NET/geniuseoe2012/article/details/8723702 说到Android下拉框spineer,框架中虽有现成的控件,但实际效 ...