#include<bits/stdc++.h>
#include <ext/pb_ds/hash_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define int long long
using namespace std;
int id_S(int x){return x*(x+1)/2;}
//id*mu=phi
//I*phi=id
const int N=2e6+1;
cc_hash_table <int,int>Phi,Mu,P,M;
int cnt;
int phi(int x){
if(P[x]||x<=N)return Phi[x];
int p=id_S(x);
for(int l=2,r;l<=x;++l){
r=x/(x/l);
p-=phi(x/l)*(r-l+1);
l=r;
}
return P[x]=1,Phi[x]=p;
}
int mu(int x){
if(M[x]||x<=N)return Mu[x];
int p=1;
for(int l=2,r;l<=x;++l){
r=x/(x/l);
p-=mu(x/l)*(r-l+1);
l=r;
}
return M[x]=1,Mu[x]=p;
}
int p[N+1],isp[N+1];
void Eshishai(int n){
Mu[1]=Phi[1]=1;
for(int i=2;i<=n;++i){
if(!isp[i]){
Phi[i]=i-1,Mu[i]=-1;
p[++cnt]=i;
}
for(int J=1;J<=cnt;++J){
int x=p[J],j=x*i;
if(j>n)break;
isp[j]=1;
if(i%x==0){
Phi[j]=x*Phi[i];
//Mu[j]=-Mu[i];
break;
}
Mu[j]=Mu[x]*Mu[i];
Phi[j]=Phi[x]*Phi[i];
}
}
}
signed main(){
Eshishai(N);
for(int i=1;i<=N;++i){
Phi[i]+=Phi[i-1];
Mu[i]+=Mu[i-1];
}
int t=1;cin>>t;
while(t--){
int x=1e9;
cin>>x;
cout<<phi(x)<<' ';
cout<<mu(x)<<'\n';
}
return 0;
}
这份代码T了两个点,但我不知道为什么,执行次数CNT没有任何问题,求大佬帮助