题目链接
题目类型:高斯消元求解异或方程组
题目来源:CCPC网络赛
题目分析
题目大意
给出n
个数,这n
个数中每个数的最大质因子不会超过2000,问,取这n
个数中的若干个数相乘,能凑出多少完全平方数
解析
先说结论: 找出异或方程组矩阵的自由元个数k,结果就是2^k-1
打表很容易发现,在2000数据范围之内,质数只有303个,所以对于第i列中的303行,表示每一个自由变量的系数,如果该数的第j个质数因子个数为奇数个,那么则置1,表示还差一个与之配对,我们的目的是每个素数都出现偶数次,那么我们让每一行最后异或的结果为0即可。对于形成的矩阵进行二进制的高斯消元,可以直接求出来自由元的数量。
详细的请参考白书160页例题25-UVa11542
代码
1 |
|