题意:n个数的两两做和,然后异或
分析:
异或的性质:两个相同的数异或为0,所以Ai+Aj异或Aj+Ai等于0,所以最终结果就是Ai+Ai的异或
代码:
#include<stdio.h>
long long t,n,m,z,l;
long long a[1000005];
int main()
{
scanf("%I64d",&t);
while(t--){
scanf("%I64d%I64d%I64d%I64d",&n,&m,&z,&l);
a[1]=0;
long long ans=0;
long long i;
for(i=2;i<=n;i++){
a[i]=(a[i-1]*m+z)%l;
ans^=(a[i]*2);
}
printf("%I64d\n",ans);
}
}

本文介绍了一种利用异或运算解决特定数列求和问题的算法。通过分析数列特性,利用异或运算的性质简化计算过程,最终实现高效求解。文中提供了一个C语言实现的例子。
1797

被折叠的 条评论
为什么被折叠?



