每个数相当于一堆石子,每个数的质因子个数为每堆石子的石子数
代码:
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
int vis[10000010],p[10000010],num[10000010];
void init()
{
int i,j,cnt=0;
for(i=2;i<=10000010;i++)
{
if(!vis[i])
{
p[cnt++]=i;
num[i]=1;
}
for(j=0;p[j]<=10000010/i;j++)
{
vis[i*p[j]]=1;
num[i*p[j]]=num[i]+1;
if(i%p[j]==0)
break;
}
}
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n,sum=0,i,x;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
sum^=num[x];
}
if(sum)
printf("Alice\n");
else
printf("Bob\n");
}
return 0;
}