从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案。

先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方。

所以我们需要选择一个对应质因子指数为奇数的元素,将他们两个放在一个方案中,但是又有可能会引入其他的质因子。

这样就变成了求解行列式中自由变元的数量问题。

将数组转换成行列式,利用高斯消元求解。

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<vector>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. bool pri[];
  8. int a[][];
  9. int max_;
  10. int t, n;
  11. long long x;
  12. vector<int>V;
  13.  
  14. void Prime(){
  15. memset(pri,,sizeof(pri));
  16. pri[] = pri[] = ;
  17. for(int i=;i<;i++)if(pri[i]){
  18. V.push_back(i);//对素数离散一下 优化一下
  19. for(int j=i<<;j<;j+=i)
  20. pri[i] = ;
  21. }
  22. }
  23. void init(){
  24. memset(a,,sizeof(a));
  25. max_ = ;
  26. }
  27. int gauss(){// 高斯消元
  28. int i = , j = ;
  29. while(i<=max_ && j<n){
  30. int k = i;
  31. for(;k<=max_;k++)
  32. if(a[k][j])break;
  33. if(k != max_ + ){
  34. for(int l=;l<n;l++){
  35. // 第j个等式的 k位上为 1
  36. // 将第 k 行与第 i 行 进行 行交换
  37. swap(a[i][l],a[k][l]);
  38. }
  39. for(int k=i+;k<=max_;k++){
  40. if(a[k][j]){
  41. for(int l=j;l<n;l++)
  42. a[k][l] ^= a[i][l];// 这里是优化后的式子
  43. }
  44. }
  45. i++;
  46. }
  47. j++;
  48. }
  49. return n-i;
  50. }
  51. int main(){
  52. Prime();
  53. scanf("%d",&t);
  54. while(t--){
  55. init();
  56. scanf("%d",&n);
  57. for(int i=;i<n;i++){
  58. scanf("%lld",&x);
  59. for(int j=;j<V.size() && V[j]<= x;j++){
  60. while(x%V[j] == ){
  61. a[j][i] ^= ;
  62. // 若 质因子的指数为偶数 则行列式对应位上为 0
  63. // 奇数 为 1
  64. max_ = max(max_, j);
  65. // 记录一下最大值, 优化
  66. x /= V[j];
  67. }
  68. }
  69. }
  70. printf("%lld\n",(1ll<<gauss())-);
  71. }
  72. return ;
  73. }

UVA 11542 高斯消元的更多相关文章

  1. UVa 11542 (高斯消元 异或方程组) Square

    书上分析的太清楚,我都懒得写题解了.=_=|| #include <cstdio> #include <cstring> #include <cmath> #inc ...

  2. uva 10828 高斯消元求数学期望

    Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name ...

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

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

  4. UVa 11542 Square (高斯消元)

    题意:给定 n 个数,从中选出一个,或者是多个,使得选出的整数的乘积是完全平方数,求一共有多少种选法,整数的素因子不大于 500. 析:从题目素因子不超过 500,就知道要把每个数进行分解.因为结果要 ...

  5. UVA 10828 - Back to Kernighan-Ritchie(概率+高斯消元)

    UVA 10828 - Back to Kernighan-Ritchie 题目链接 题意:给图一个流程图,有结点的流程,每次进入下一个流程概率是均等的,有q次询问,求出每次询问结点的运行期望 思路: ...

  6. uva 1560 - Extended Lights Out(枚举 | 高斯消元)

    题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自 ...

  7. uva 10808 - Rational Resistors(基尔霍夫定律+高斯消元)

    题目链接:uva 10808 - Rational Resistors 题目大意:给出一个博阿含n个节点,m条导线的电阻网络,求节点a和b之间的等效电阻. 解题思路:基尔霍夫定律,不论什么一点的电流向 ...

  8. UVA 1397 - The Teacher&#39;s Side of Math(高斯消元)

    UVA 1397 - The Teacher's Side of Math 题目链接 题意:给定一个x=a1/m+b1/n.求原方程组 思路:因为m*n最多20,全部最高项仅仅有20.然后能够把每一个 ...

  9. UVA 1564 - Widget Factory(高斯消元)

    UVA 1564 - Widget Factory 题目链接 题意:n种零件, 给定m个制作时间.每段时间制作k个零件,每种零件有一个制作时间,每段时间用Mon到Sun表示,求每一个零件的制作时间.还 ...

随机推荐

  1. 获取并安装XWAF框架压缩包(2)

    建议在Eclipse环境下使用XWAF框架来开发用户的Web项目,并遵循以下步骤和约定. 1.获取XWAF框架压缩包文件 程序员点击下列地址免费下载XWAF框架的压缩包文件:XWAF框架压缩文件 2. ...

  2. 截屏状态监听 - iOS

    既接到电话状态监听的需求之后再次添加了截屏状态的监听,当使用 App 时若用户执行截屏操作需要对当前状态进行监听操作,下面有两种方法,其中可以替换截屏的图片内容(Plan A),也可以弹出提示框(Pl ...

  3. 纯javascript实现选择框的全选与反选

    HTML部分 <div id="wrap_input_box" > <input type="checkbox"><br> ...

  4. c++类模板分文件编写存在的问题

    c++分文件编写的编译机制: 各个文件独立编译,如果在某.cpp文件中出现了函数调用,但是在此.cpp文件并没有对应函数的实现.此时就会在函数调用出生成特定的符号,在之后的链接过程完成函数调用. C+ ...

  5. 使用Mybatis连接到Mysql报错,WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be esta

    在Eclipse中使用springboot整合Mybatis,连接到5.7版本Mysql报错WARN: Establishing SSL connection without server's ide ...

  6. Ubuntu18.04安装mysql及相关配置

    step 1: sudo apt-get update step 2: sudo apt-get install mysql-server step3: 查看mysql服务端是否开启 systemct ...

  7. iview-cli 项目、iView admin 代理与跨域问题解决方案

    iview-cli 项目.iView admin 跨域.代理问题解决方案 在webpack.dev.config.js文件中: 添加: devServer: { historyApiFallback: ...

  8. Python-逻辑运算

    1 or 3>2 and 4<5 or 6 and 2<7

  9. python 模块路径查找 及 添加

    **** python 模块路径查找: 通过模块的__file__属性来确定: **** 模块路径添加: 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.ap ...

  10. 防360TAB页面的样式页面

    今天给朋友做了一个仿照360新tab页面的效果,主要就是一些样式和JQUERY的应用,超级简单,现在把源码放出来 源码下载