当n=2147483647时会RE。不知道问题出在哪里。
//Code By Spouter_27
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e6,Inf=1e18;
ll t,n,mil[N+10],phi[N+10];
ll prim[N+10],cnt;
bool vis[N+10];
unordered_map<ll,ll> ans_mil,ans_phi;
void init(){
mil[1]=phi[1]=1;
for(int i=2;i<=N;i++){
if(!vis[i]){
prim[++cnt]=i;mil[i]=-1,phi[i]=i-1;
}
for(int j=1;j<=cnt&&prim[j]*i<=N;j++){
vis[prim[j]*i]=1;
if(i%prim[j]==0){
phi[prim[j]*i]=phi[i]*prim[j];
break;
}
phi[prim[j]*i]=phi[i]*phi[prim[j]];
mil[prim[j]*i]=-mil[i];
}
}
for(int i=2;i<=N;i++){
mil[i]+=mil[i-1];phi[i]+=phi[i-1];
}
}
ll summil(ll n){
if(n<=N) return mil[n];
if(ans_mil[n]) return ans_mil[n];
ll ans=1;
for(int l=2,r;l<=n;l=r+1){
r=min(n/(n/l),n);
ans-=(r-l+1)*summil(n/l);
}
ans_mil[n]=ans;
return ans;
}
ll sumphi(ll n){
if(n<=N) return phi[n];
if(ans_phi[n]) return ans_phi[n];
ll ans=n*(n+1)/2;
for(int l=2,r;l<=n;l=r+1){
r=min(n/(n/l),n);
ans-=(r-l+1)*sumphi(n/l);
}
ans_phi[n]=ans;
return ans;
}
signed main(){
scanf("%lld",&t);
init();
while(t--){
scanf("%lld",&n);
printf("%lld %lld\n",sumphi(n),summil(n));
}
return 0;
}