UVa11542Squre——异或方程组&&高斯消元法
题意
给出 $n$ 个整数,从中选出1个或多个,使得选出的整数乘积是完全平方数。一共有多少种选法?($1 \leq n \leq 100$,$1 \leq a_i \leq 10^{15}$ 且不含大于500的素因子)
分析
“不含大于500的素因子”提示我们考虑每个数的素因数分解,用01向量表示一个数,再用 $n$ 个01变量 $x_i$ 来表示我们的选择,其中 $x_i=1$ 表示要选第 $i$ 个数,$x_i=0$ 表示不选第 $i$ 个数,则对每个素数的幂列出一个模2的方程。
如果要让这个数是完全平方数,每个幂都应该是偶数,即模2为0.
在模2的剩余系中每个数都是0/1,加法可换成异或,于是就成了一个异或方程组。
xor方程组很好消元的,因为不需要做乘法和除法,只需要做xor;每次也不需要找绝对值最大的系数(因为系数不是0就是1,只需系数为1即可消元)
设自由变量为 $r$,则最终答案为 $2^r-1$,减1是因为本题不允许一个整数都不选。
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = + ; typedef int Matrix[maxn][maxn]; //m个方程,n个变量
int Rank(Matrix A, int m, int n) //求矩阵的秩
{
int i = , j = , k, r, u;
while(i < m && j < n) //当前正在处理第i个方程的第j个变量
{
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;
} //返回n以内素数的个数
//埃氏筛法O(nloglogn)
const int maxs = + ;
int prime[maxs]; //prime[i]表示第i个素数
bool is_prime[maxs + ]; //is_prime[i]为true表示i是素数 int sieve(int n)
{
int cnt = ;
for (int i = ; i <= n; i++) is_prime[i] = true;
is_prime[] = is_prime[] = false;
for (int i = ; i <= n; i++)
{
if (is_prime[i])
{
prime[cnt++] = i;
for (int j = i * i; j <= n; j += i) is_prime[j] = false; //i * i可能爆int
}
}
return cnt;
} Matrix A; int main()
{
int m = sieve(); int T;
scanf("%d", &T);
while(T--)
{
int n, max_p=;
ll 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] == )
{
max_p = max(max_p, j);
x /= prime[j];
A[j][i] ^= ;
}
}
}
int r = Rank(A, max_p+, n);
printf("%lld\n", (1LL << (n-r))-);
}
return ;
}
From:
《算法竞赛入门经典训练指南》——刘汝佳、陈锋著
UVa11542Squre——异或方程组&&高斯消元法的更多相关文章
- poj1222(高斯消元法解异或方程组+开关问题)
题目链接:https://vjudge.net/problem/POJ-1222 题意:给定一个5×6的01矩阵,改变一个点的状态时它上下左右包括它自己的状态都会翻转,因为翻转2次等价与没有翻转,那么 ...
- bzoj千题计划105:bzoj3503: [Cqoi2014]和谐矩阵(高斯消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=3503 b[i][j] 表示i对j是否有影响 高斯消元解异或方程组 bitset优化 #include ...
- 高斯消元法求解异或方程组: cojs.tk 539.//BZOJ 1770 牛棚的灯
高斯消元求解异或方程组: 比较不错的一篇文章:http://blog.sina.com.cn/s/blog_51cea4040100g7hl.html cojs.tk 539. 牛棚的灯 ★★☆ ...
- 【poj1830-开关问题】高斯消元求解异或方程组
第一道高斯消元题目~ 题目:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关 ...
- 【HDU 5833】Zhu and 772002(异或方程组高斯消元)
300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案. 合法方案的每个数的质因数的个数的奇偶值异或起来为0. 比如12=2^2*3,对应的奇偶值为01(2的个数是偶数为0,3 ...
- 小游戏 Lights Out (关灯) 的求解 —— 异或方程组
Author : Evensgn Blog Link : http://www.cnblogs.com/JoeFan/ Article Link : http://www.cnblogs.com/J ...
- hdu 5833 Zhu and 772002 异或方程组高斯消元
ccpc网赛卡住的一道题 蓝书上的原题 但是当时没看过蓝书 今天又找出来看看 其实也不是特别懂 但比以前是了解了一点了 主要还是要想到构造异或方程组 异或方程组的消元只需要xor就好搞了 数学真的是硬 ...
- bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)
http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
随机推荐
- 未安装发布所需的web发布扩展
解决方案:需要安装web deploy 下载网站:https://www.iis.net/downloads/microsoft/web-deploy 假如还是打不开的话,估计时打开方式错误了, 要用 ...
- C# 录音和变调
一直想研究下录音 正好有个项目有机会使用一下强大的 NAudio (https://github.com/naudio/NAudio)库 录音 NAudio 录音类库 public class NAu ...
- modbus协议使用小记
下载了libmodbus库,交叉编译后运行,总是接收回复时不正确.原因不明. 由于使用到modbus的需求比较简单,所以选择直接拼出modbus的请求报文,然后用串口直接发送和接收的方式, 拼modb ...
- centos7安装face_recognition踩各种坑
要在阿里云服务器上部署face_recognition.用的是centos7. 千辛万苦啊.感谢网上的各种解答.回报社会,我也把各种坑写下了.整理的有点乱.不过仔细看,有干货的. 感谢这个博主Fat ...
- pandas-12 数学计算操作df.sum()、df.min()、df.max()、df.decribe()
pandas-12 数学计算操作df.sum().df.min().df.max().df.decribe() 常用的数学计算无非就是加减,最大值最小值,方差等等,pandas已经内置了很多方法来解决 ...
- java中异常的抛出:throw throws
java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...
- CSS-盒模型与文本溢出笔记
注意点: 文本居中: text-align:center:文本左右居中 line-heigh:30px; 等于容器高度时,单行文本上下居中 margin:0 auto: 浏览器居中 清除margin ...
- 因改漏洞而引申了解的Cookie机制!
近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSL)Cookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下. 一.加密会话( ...
- php在虚拟机和windows上的应用
学习目标:linux+apache+php合在一起的应用 在windows中三者的的关联及应用 php是apache的一个外挂程序,必须依靠web服务器才可以运行.当客户 ...
- hbase完整分布式集群搭建
简介: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop2.8 ha 集群搭建 hbase完整分布式集群搭建 hadoop完整集群遇到问题汇总 Hb ...