#7 Wrong Answer.wrong answer On line 3 column 18, read 0, expected 2. 记录
输入:
10
738714739
818399345
979944004
564163474
269146882
19087026
136232047
394444009
927109089
2147483647
我的输出:

蒟蒻求助,请问这是为何?
源代码:
#include <bits/stdc++.h>
using namespace std;
#define cn const
#define ll long long
cn int N=1700001;
int pr[300000],npr,us[N];
ll phis[N];bitset<N> zhi;
int MX;
void ouls()
{
zhi[1]=1;us[1]=1;phis[1]=1;
for(int i=2;i<=MX;i++)
{
if(zhi[i]==0){pr[++npr]=i;us[i]=-1;phis[i]=i-1;}
for(int j=1;j<=npr&&i*pr[j]<=MX;j++)
{
zhi[i*pr[j]]=1;
if(i%pr[j]==0)
{
phis[i*pr[j]]=pr[j]*phis[i];
us[i*pr[j]]=0;break;
}
phis[i*pr[j]]=phis[i]*phis[pr[j]];
us[i*pr[j]]=us[i]*us[pr[j]];
}
}
for(int i=1;i<=MX;i++)us[i]+=us[i-1];
for(int i=1;i<=MX;i++)phis[i]+=phis[i-1];
}
struct hsh
{
private:
ll t[10000000],v[10000000];cn int md=9900047;
public:
int n;hsh(){n=0;}
inline bool ins(cn ll&ky,cn ll&val)
{
int m=ky%md;
while(t[m]&&t[m]!=ky)++m;
if(t[m]==ky)return 0;
++n;t[m]=ky;v[m]=val;return 1;
}
inline bool del(cn ll&ky)
{
int m=ky%md;
while(t[m]&&t[m]!=ky)++m;
if(t[m]!=ky)return 0;
--n;t[m]=9e18+7;return 1;
}
inline bool exi(cn ll&ky)cn
{
int m=ky%md;
while(t[m]&&t[m]!=ky)++m;
return t[m]==ky;
}
inline ll at(cn ll&ky)cn
{
int m=ky%md;
while(t[m]&&t[m]!=ky)++m;
return t[m]==ky?v[m]:9e18+7;
}
};
hsh usm,phism;
int usum(cn int&n)
{
if(n<=MX)return us[n];
if(usm.exi(n))return usm.at(n);
int s=1;
for(ll l=2,r;l<=n;l=r+1)
{
r=n/(n/l);
s-=usum(n/l)*(r-l+1);
}
usm.ins(n,s);
return s;
}
ll phisum(cn int&n)
{
if(n<=MX)return phis[n];
if(phism.exi(n))return phism.at(n);
ll s=(ll)n*((ll)n+1)/2;
for(ll l=2,r;l<=n;l=r+1)
{
r=n/(n/l);
s-=phisum(n/l)*(r-l+1);
}
phism.ins(n,s);
return s;
}
inline int id23(cn int&n)
{
cn ll x=(ll)n*n;ll l=-x,r=x;
while(l!=r-1)
{
cn ll m=l+r>>1;
if(m*m*m<=x)l=m;else r=m;
}
return l;
}
inline int re()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+(ch&15);ch=getchar();}
return x;
}
inline void wr(ll x)
{
if(x>=10)wr(x/10);
putchar(x%10^'0');
}
inline void wr(ll x,char c)
{
if(x<0){x=-x;putchar('-');}
wr(x);putchar(c);
}
int main()
{
int q[11],T=re();
for(int i=1;i<=T;i++){q[i]=re();MX=max(MX,q[i]);}
MX=id23(MX);if(MX<0||MX>1700000)MX=1700000;ouls();
for(int i=1;i<=T;i++){wr(phisum(q[i]),' ');wr(usum(q[i]),'\n');}
return 0;
}