题目背景
模板题,无背景。
模板题,很巧妙
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define uint unsigned int
uint seed,a[20000001],pri[5000000],cnt;
bool vis[20000001];
inline uint getnext(){
seed^=seed<<13;
seed^=seed>>17;
seed^=seed<<5;
return seed;
}
int main(){
ios::sync_with_stdio(0);
uint n,res=0;
cin>>n>>seed;
for(int i=1;i<=n;i++){
a[i]=getnext();
}
for(int i=2;i<=20000000;i++){
if(!vis[i]){
pri[++cnt]=i;
}
for(int j=1;j<=cnt,i*pri[j]<=20000000;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
for(int i=1;i<=cnt;i++){
for(int j=1;j*pri[i]<=n;j++){
a[j*pri[i]]+=a[j];
}
}
//for(int i=1;i<=n;i++)cout<<a[i]<<' ';cout<<endl;
//for(int i=1;i<=n;i++)cout<<b[i]<<' ';cout<<endl;
for(int i=1;i<=n;i++){
res^=a[i];
}
cout<<res;
return 0;
}//