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 ...
随机推荐
- Linux下将.Asp Core 部署到 Docker容器中
我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...
- Data-Structure-Notes
Data Structure Notes Chapter-1 Sorting Algorithm Selection Sorting: /* * Selection Sort */ template& ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
- PS 有哪些小技巧让你好用到哭?
作者:bart链接:https://www.zhihu.com/question/328895616/answer/763462289来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- docker redis4.0集群搭建
一.前言 redis集群对于很多人来说非常熟悉,在前些日子,我也有一位大兄弟也发布过一篇关于在阿里云(centOS7)上搭建redis 集群的文章,虽然集群搭建的文章在网上很多,我比较喜欢这篇文章的地 ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- Kafka理解
1. 引言 最近使用Kafka做消息队列时,完成了基本的消息发送与接收,已上线运行.一方面防止出现Bug时自己不能及时定位问题,一方面网上的配置可能还可以更加优化,决定去了解下Kafka. 2. 配置 ...
- 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题
打开IE突然发现报错 试了各种方法都不行 最终看这篇文章,才解决:https://www.yijile.com/log/577.html 打开IE设置选项,选择管理加载项,如图讲该选项禁用,就不报错. ...
- python 系统定时关机
#coding=utf-8 "shutdown at 23:00" from datetime import * import os import win32api import ...
- 想知道使用OPC服务器时如何设置DCOM?看完本文就懂了(下)
接上文...... “安全”选项卡“安全”选项卡上,有3个选项需要设置. 启动权限 选择“使用默认值”选项 访问权限 选择“使用默认值”选项 配置权限 选择“自定义”选项,然后单击“编辑” 将打开一个 ...