线性筛+快速幂
#include<bits/stdc++.h>
#define lc ((o) << 1)
#define rc ((o) << 1 | 1)
using namespace std;
typedef long long ll;
typedef pair<int,int>Pair;
const int N=13000010;
const ll mod=1e9+7;
int prime[N];
int ans[N];//用ll内存上会超
int vis[N];
ll qpow(ll a,ll b){
ll ans=1,res=a;
while(b){
if(b&1) ans=(1LL*ans*res)%mod;
res=(1LL*res*res)%mod;
b>>=1;
}
return ans;
}
int main()
{
int n;
cin>>n;
int cnt=0;
ll sum=0;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
prime[++cnt]=i;
ans[i]=qpow(i,n);
}
for(int j=1;j<=cnt;j++)
{
if(prime[j]*i>n) break;
vis[prime[j]*i]=1;
ans[prime[j]*i]=(1ll*ans[i]*ans[prime[j]])%mod;
if(i%prime[j]==0) break;
}
sum^=ans[i];
}
sum= sum^1;
cout<<sum<<endl;
}