//给一个数组A,问这个数组的所有(Ai+Aj)的异或值
//由于对于每一个(Ai+Aj)^(Aj+Ai) == 0
//所以答案是2*(a1^a2^a3...)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
typedef __int64 ll ;
int main()
{
ll n , m , l , z ;
int t ;
scanf("%d" , &t) ;
while(t--)
{
scanf("%I64d%I64d%I64d%I64d" , &n , &m , &z, &l) ;
ll ans = 0 ;
ll pre = 0 ;
ll now ;
for(int i = 2;i <= n;i++)
{
now = (pre*m + z)%l ;
ans = ans^(2*now) ;
pre = now ;
}
printf("%I64d\n" , ans) ;
}
}
hdu5344MZL's xor
最新推荐文章于 2017-09-21 17:03:25 发布