题目地址:​​点击打开链接​

思路:二进制数进行异或运算相同为0,不同为1,a[i]+a[j],和a[j]+a[i]异或值为0,不算,只算a[i]+a[i]

AC代码:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
int t,i;
int n,m,z,l;
scanf("%d",&t);
while(t--)
{
__int64 temp = 0,ans = 0;
scanf("%d%d%d%d",&n,&m,&z,&l);
for(i=2; i<=n; i++)
{
temp = (temp * m + z) % l;
ans ^= (temp * 2);
}
printf("%I64d\n",ans);
}
return 0;
}