链接:https://www.nowcoder.com/acm/contest/211/F
来源:牛客网
一行一个整数,表示所有结果异或起来的结果。
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include<vector> #include<set> #include<map> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const int MAXN=2e6+100; LL a[MAXN]; LL cnt[MAXN]; LL sumb[MAXN]; LL suma[MAXN]; LL n,m,x; int main() { scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); suma[1]++; suma[a[i]+1]--; cnt[a[i]]++; } for(int i=1;i<=m;i++) suma[i]+=suma[i-1]; for(int i=m;i>=1;i--) { for(int k=i+i;k<=m;k+=i) cnt[k]+=cnt[i]; } for(int i=1;i<=m;i++) { sumb[i]=sumb[i-1]+cnt[i]; } LL up_x=0; LL down_x=0; LL ans=0; for(int i=1;i<=m;i++) { down_x=0; for(int j=i;j<=m;j+=i) down_x+=suma[j]; up_x=sumb[i]; ans^=(down_x+up_x); } printf("%lld\n",ans); return 0; }
原文:https://www.cnblogs.com/a249189046/p/9820976.html