分析:给你n个元素的数组a,让你求所有(ai+aj)(1<=i,j<=n)的异或的值,异或运算:0^0=0;0^1=1;1^0=1;1^1=0。由于ai+aj=aj+ai,所以(ai+aj)^(aj+ai)=0,又a^0=a,所有答案就是所有(ai+ai)(1<=i<=n)的值。
# include <stdio.h>
__int64 a[500005];
int main()
{
int i,n,m,z,l,ans,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&n,&m,&z,&l);
a[1]=0;
for(i=2;i<=n;i++)
a[i]=(a[i-1]*m+z)%l;
for(i=1,ans=0;i<=n;i++)
ans=ans^(a[i]+a[i]);
printf("%d\n",ans);
}
return 0;
}