HDU5833
来源:互联网 发布:软件修改器 编辑:程序博客网 时间:2024/05/21 06:34
每个数的质因子的大小不超过2000,2000以内质数大概300个。因为要选取若干数,使得他们乘起来是完全平方数,等价于把他们质因数的质数加起来,各质因数质数%2 为0
考虑每个ai 都是一个列向量,每个ai,j 就是第i 个数的第j 个质因子的次数,那么要求的就是对于每一行都有∑0≤j<nai,j≡0 mod 2 高斯消元搞一搞,数数自由元即可
//// Created by Running Photon// Copyright (c) 2015 Running Photon. All rights reserved.//#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <sstream>#include <set>#include <vector>#include <stack>#define ALL(x) x.begin(), x.end()#define INS(x) inserter(x, x,begin())#define ll long long#define CLR(x) memset(x, 0, sizeof x)using namespace std;const int inf = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int maxn = 1e5 + 10;const int maxv = 2e3 + 10;const double eps = 1e-9;int maxprime[maxv];std::vector <int> primes;int mp[311][311];void init() { for(int i = 2; i <= 2e3; i++) { if(!maxprime[i]) { primes.push_back(i); for(int j = i; j <= 2e3; j += i) maxprime[j] = i; } }// for(int i = 0; i < primes.size(); i++) {// printf("%d\n", primes[i]);// }}ll Pow(ll a, ll n) { ll ret = 1; while(n) { if(n & 1) ret = ret * a % MOD; a = a * a % MOD; n >>= 1; } return ret;}void print(int n, int m) { for(int i = 0; i < n; i++) { for(int j = 0; j <= m; j++) { printf("%d ", mp[i][j]); } puts(""); }}ll Gauss(int equ, int var) {// print(equ, var); int row = 0, col = 0; int Free = 0; for(row = 0, col = 0; row < equ && col < var; row++, col++) { int maxRow = row; for(int i = row + 1; i < equ; i++) { if(mp[i][col] > mp[maxRow][col]) maxRow = i; } if(!mp[maxRow][col]) { Free++; row--; continue; } if(maxRow != row) { for(int j = col; j <= var; j++) swap(mp[row][j], mp[maxRow][j]); } for(int i = row + 1; i < equ; i++) { if(mp[i][col]) { for(int j = col; j <= var; j++) { mp[i][j] ^= mp[row][j]; } } } } return Pow(2, Free);}int main() {#ifdef LOCAL freopen("C:\\Users\\Administrator\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\Administrator\\Desktop\\out.txt","w",stdout);#endif// ios_base::sync_with_stdio(0); init(); int cas = 0, T; scanf("%d", &T); while(T--) { printf("Case #%d:\n", ++cas); int n = 0, m; scanf("%d", &m); CLR(mp); for(int j = 0; j < m; j++) { ll x; scanf("%lld", &x); int i = 0; for(i = 0; x != 1; i++) { int cnt = 0; while(x % primes[i] == 0) { x /= primes[i]; cnt++; } mp[i][j] = cnt % 2; } n = max(n, i); }// printf("n = %d m = %d\n", n, m); for(int i = 0; i < n; i++) { mp[i][m] = 0; } printf("%lld\n", (Gauss(max(n, m), m) - 1 + MOD) % MOD); } return 0;}
0 0
- HDU5833
- hdu5833 高斯消元
- 高斯消元 hdu5833,hdu3364,hihocoder1195
- hdu5833 Zhu and 772002
- hdu5833 Zhu and 772002
- hdu5833 异或版高斯消元
- hdu5833 Zhu and 772002 【高斯消元解异或方程组】
- HDU5833-Zhu and 772002(高斯消元)
- 2016中国大学生程序设计竞赛 - 网络选拔赛 hdu5833 Zhu and 772002
- hdu5833 Zhu and 772002 (高斯消元的简单应用)
- 2016中国大学生程序设计竞赛 - 网络选拔赛 1002 Zhu and 772002 hdu5833
- HDU5833(2016CCPC网赛)——Zhu and 772002(异或方程组,素数分解)
- 2016ccpc 1002(hdu5833)题解 (高斯消元求异或方程组自由变元)
- ACM高斯消元法 亦或方程组求秩 (HDU5833 Zhu and 772002)
- 实用的 html 前端组件源代码总结
- LightOJ 1092 Lighted Panels(状压+高斯消元)
- android 关机充电流程
- laravel5.2 开启软删除
- ScrollView中嵌套ListView滚动冲突的两种解决方案
- HDU5833
- JavaScript常用表单验证
- CC2640之添加一个自定义的特性值
- 2016.08.15【初中部 NOIP提高组 】模拟赛C题目
- 科技论文写作
- Hive学习笔记 --- Hive的数据类型
- 2567. 【NOIP2011模拟9.17】电话时间 (StandardIO)
- 设计模式-适配器模式
- CodeForces 510B Fox And Two Dots(判断环的存在性,DFS一类题)