1. 程式人生 > >Uva-11859 Division Game

Uva-11859 Division Game

題解詳見劉汝佳--訓練指南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;
}