Question link: Click the open link
White book example trainer... P161
# Include <cstdio> # include <iostream> # include <algorithm> # include <math. h> # include <string. h >#include <algorithm> using namespace STD; # define ll int # define ll long longconst int mod = 1000000009; const int maxn = 510; const int maxp = 100; LL Prime [1000], primenum; // There are primenum prime math. hvoid prime (LL max_prime) {primenum = 0; prime [primenum ++] = 2; for (ll I = 3; I <= max_prime; I + = 2) for (ll j = 0; j <primenum; j ++) if (I % prime [J] = 0) break; else if (prime [J]> SQRT (double) I) | j = primenum-1) {Prime [primenum ++] = I; break ;}} typedef int matrix [maxn] [maxn]; int rank (matrix A, int M, int N) {// M equations n variables int I = 0, j = 0, K, R, U; while (I <M & J <n) {r = I; for (k = I; k <m; k ++) if (a [k] [J]) {r = K; break ;} if (A [r] [J]) {If (R! = I) for (k = 0; k <= N; k ++) Swap (A [r] [K], a [I] [k]); for (u = I + 1; U <m; U ++) if (a [u] [J]) for (k = I; k <= N; k ++) A [u] [k] ^ = A [I] [k]; I ++;} J ++;} return I;} matrix; int main () {Prime (500); int t; CIN> T; while (t --) {int N, maxp = 0; long X; CIN> N; memset (A, 0, sizeof A); For (INT I = 0; I <n; I ++) {CIN> X; For (Int J = 0; j <primenum; j ++) while (X % prime [J] = 0) {maxp = max (maxp, J); X/= prime [J]; A [J] [I] ^ = 1 ;}int r = rank (A, maxp + 1, n); cout <(1ll <(n-R )) -1 <Endl;} return 0 ;}