版权声明:最后一年,加油~ https://blog.csdn.net/zzti_xiaowei/article/details/84872895
题解详见刘汝佳--训练指南P136
写的超级详细了,在此贴个预处理代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e4+10;
int T,n,m;
int cnt[Max_n];
void solve(){ //打表出2~Max_n的素因子个数(埃氏筛法改)
memset(cnt,0,sizeof(cnt));
for(int i=2;i<Max_n;i++){
int t=i;
if(!cnt[i]){
while(t<Max_n){ //当i为素数时才进行筛选,用t控制(当i==2时,4被筛一次,12被筛两次,8要被筛三次)
for(int j=t;j<Max_n;j+=t)
cnt[j]++;
t*=i;
}
}
}
}
int main()
{
solve();
scanf("%d",&T);
for(int t=1;t<=T;t++){
scanf("%d%d",&n,&m);
int tag=0;
for(int i=1;i<=n;i++){
int t,k=0;
for(int j=1;j<=m;j++){
scanf("%d",&t);
k+=cnt[t];
}
tag^=k;
}
printf("Case #%d: %s\n",t,tag?"YES":"NO");
}
return 0;
}