hdu5344MZL's xor

//给一个数组A,问这个数组的所有(Ai+Aj)的异或值
//由于对于每一个(Ai+Aj)^(Aj+Ai) == 0
//所以答案是2*(a1^a2^a3...)
#include
#include
#include
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) ;
    }
}






你可能感兴趣的:(位运算)